2013-11-04 2 views
1

이클립스를 사용하여 프로젝트를 만드는 동안 안드로이드 2.2 (Froyo) 및 Android SDK 4.2 (Jelly Bean)로 대상 SDK가 Android 4.3으로 컴파일되도록 최소 SDK가 있어야합니다. 나는 데이터베이스를 만들기 위해 sqlitebrowser v2.ob1을 사용했다. 내 응용 프로그램은 오류없이 실행되지만 (logcat의 빨간색 줄은 몇 줄) 에뮬레이터에서 실행하면 내 요구 사항을 충족합니다. 나는 3 개의 다른 에뮬레이터를 시도하고 잘 동작한다. 하지만 모바일 장치에서이 응용 프로그램을 사용하면 데이터베이스와 관련이있을 때마다 강제 종료를 알 수 있습니다. 나는 그것이 데이터베이스에서 검색하거나 데이터베이스에 연결해야 할 때 강제로 닫히는 것을 보여줍니다. 검색을 통해 나는 외부에서 생성 된 데이터베이스가 자산 폴더로 복사 된 다음 기본 위치로 복사되는 경우에도 .apk 파일로만 앱을 실행할 수 있다는 것을 알게되었습니다. 내 질문은앱의 안드로이드 버전과 앱에 지정된 버전 간의 관계

  1. 안드로이드 2.2에서 4.2에 이르는 장치에서 내 응용 프로그램이 제대로 작동하지 않아야합니까?

  2. 대신 Android 4.2로 앱을 컴파일해야합니까?

  3. 내가 시도한 장치의 버전에 대해 확실하지 않지만 2.2 및 4.2 이내인지 확인하십시오. (아마 진저 브레드). USB를 통해 PC에 장치를 연결하고 logcat (bcoz는 안드로이드 휴대 전화를 소유하지 않습니다)을 보는 것 이외에이 문제를 해결하려면 어떻게해야합니까?

  4. 앱의 버전, 에뮬레이터 및 모바일 또는 기타 장치의 버전은 어떻게 관련이 있습니까?

  5. 내 앱은 어떤 버전의 기기에서 실행할 수 있습니까?

이것은 내 첫 번째 Android 앱이므로 도움을 주시면 감사하겠습니다. 감사합니다.

+1

스택 트레이스가 없으면 실제로 대답 할 방법이 없습니다. 에뮬레이터를 유일한 테스트 장치로 사용하는 것은 결코 권장되지 않습니다. – tyczj

+0

기본적으로 내 앱은 2.2에서 4.2까지의 장치에서 실행되어야합니까? – user2648852

답변

4

응용 프로그램에서 하위 버전의 SDK에서 지원하지 않는 기능을 사용하고있을 가능성이 있습니다. 소스 코드 나 스택 트레이스가 없으면 무엇이 될지 정확히 말할 수는 없지만 minSdkVersiontargetSdkVersion에 대한 이해를 명확히 할 수 있습니다.

새로운 버전의 Android SDK에는 이전 버전에는 없었던 추가 기능과 API가 도입되었습니다. 이전 버전의 Android는 이러한 기능을 지원하지 않습니다.

targetSdkVersion을 지정하면 해당 특정 버전의 Android에 도입 된 기능을 사용하도록 지정합니다. 또한 특정 API 수준에서 응용 프로그램을 테스트했음을 암시하고 필요한대로 작동한다는 것을 의미합니다.

당신이 당신의 targetSdkVersion보다 낮은 minSdkVersion를 지정

, 당신은 당신이 현재 API 레벨이 있는지 확인하기 위해 코드에서 수동으로 프로그램 시험 또는 검사를 가지고 있기 때문에 응용 프로그램이 낮은 API 수준 에서 제대로 작동한다는 의미있다 실행하기 전에 기능과 호환 가능.

예를 들어 Jelly Bean에 도입 된 기능을 실행하고 싶지만 낮은 API 레벨 (예 : 진저 브레드)에 대한 지원을 유지하려는 경우 기능을 실행하기 전에 다음 체크를 추가 할 수 있습니다 (다른 버전 코드 참조). here) :

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
    // run some code specific to API level 16 
} 

안드로이드 SDK가 자동으로 낮은 API 수준에 소개 된 코드를 처리 할 수 ​​있지만, 자동으로 더 높은 API 레벨 별 코드를 처리 할 수 ​​없다.마음에 그와

그래서, 당신의 질문에 대답하기 :

  1. 아니가, 단지 당신의 애플리케이션이 안드로이드 4.2에서 제대로 작동 할 것이라고 보장된다. 지원하려는 이전 버전에 대해 이전 버전과의 호환성 여부를 확인하는 것은 사용자의 몫입니다.

  2. 중요하지 않습니다. 대신, 타겟팅하고있는 것과 동일한 API 레벨 (Android 4.2, API 레벨 17)을 실행중인 장치/에뮬레이터에서 애플리케이션을 실행 한 다음 하위 버전을 실행하는 장치/에뮬레이터에서 애플리케이션을 실행하고 그것을 일으키는 원인이되는 부호를 고립 시키십시오 (logcat는 도움이 될 것이다).

  3. 설정> 휴대 전화 정보> Android 버전으로 이동하여 기기의 Android 버전을 확인할 수 있습니다. Gingerbread가 실행 중이면 그 이후로 많은 새로운 기능이 도입되었으며 응용 프로그램에서 이러한 기능 중 일부를 사용하고있을 수 있습니다. 에뮬레이터의 경우 에뮬레이터를 만들 때 API 레벨을 지정할 수 있습니다 (SDK 관리자에서 사용할 다른 버전을 다운로드 할 수 있음).

  4. 내 대답은 지금까지이 관계를 명확하게 만들었다 고 생각합니다.

  5. 다시 말하면 Android 2.2 이상을 실행하는 모든 장치에서 실행되지만 응용 프로그램이 실행되는 것보다 높은 API 수준의 기능을 사용하는 경우 응용 프로그램이 중단 될 수 있습니다.

이 여전히 명확하지 않으면, 당신은 안드로이드 문서에 여러 플랫폼 버전을 지원에 대한 자세한 읽어야 here를.

+0

Android 2.2를 실행하는 에뮬레이터에서 앱을 실행 해 보았습니다. 그것은 힘을 가깝게 던졌습니다. 나는 logcat과 소스 코드로 질문을 게시했다. 날 pls 확인해 줄래? http://stackoverflow.com/questions/12950214/getting-force-close-while-running-app-on-emulator – user2648852