지난번 모임에서 @DongWoo_Gim 님께서 언급하시기 전까지는 미처 신경쓰지 못했던 부분인데 한번 정리하고 넘어가는게 좋을 것 같아서 글을 올립니다.
4.0.0.GA 릴리즈 노트에 보면 아래와 같이 적혀 있습니다.
Due to the addition of Material Theme support in this Release, the target SDK version must be set to API 21 (Android 5.0) or greater. If you do not set the target SDK version, Android SDK 5.0 or greater must still be installed. Previously, the target SDK version could be API 14 or greater.
The Titanium SDK no longer supports deploying applications to devices running Android 3.x or less. The minimum SDK version (if used) must be set to API 14 (Android 4.0) or greater. Previously, the minimum API level was 10 (Android 2.3.x).
Material 테마 지원으로 target SDK가 API 21(5.0) 이상이어야 한다는 내용인데 두번째 문단에 보니 minimum SDK를 API 14(4.0)이상이면 된다고 적혀있네요. 한마디로 Meterial 테마를 쓸게 아는게 아니라면 Ti SDK 4.x에서 제작한 앱을 Android 4.0부터 실행가능할거란 얘긴 것 같네요.
혹시나 해서 더욱 document의 Android SDK 관련 부분을 찾아보니 아래와 같이 되어 있습니다.
`

여기서 질문
minTargetAndroid는 5.0.x 긴데 MinAndroid/SDK 는 4.0.x 이네요. 이 둘의 차이에 예전에도 찾아보고 했었는데 명화히는 모르겠더라고요. 혹시 잘 아시는 분 계시면 친절한 설명 부탁합니다.
제가 이해한 바로는 다음과 같습니다.
minimum SDK는 실제 실행가능한 android version의 최소 버전을 말하는 것으로 minAndroid SDK를 4.0.x으로 설정하고 min targetAndroid SDK를 5.0.x로 설정해도 기본적으로는 실행되나 5.0.x에만 있고 4.0.x에 있는 api를 실행했을때 에러가 난다.
저도 4.0이 Minimum Android/SDK Version이 4.0.x (API 14) 인것은 알고 있습니다.
하지만 최근에 나온 4.1 부터는 Minimum Android/SDK Version이 5.0.x (API 22) 더라구요…
그래서 포기한 기억이 있는데, 뭔가 그 당시에 착각 했을수도 있으니 다시 한번 해보겠습니다ㅎㅎ
4.1.0.GA에서 ti info를 해보면,
Android Issues
! Android API Android 4.0 (android-14) is too old and is no longer supported by Titanium SDK 4.1.0.
The minimum supported Android API level by Titanium SDK 4.1.0 is API level 21.
라네요…
저건 아마 targetSDK를 의미하는 것 같아요.
따라서 minSDK는 4.0.x이기때문에 ti sdk 4.1.0 기준으로 개발된 랩을 gennymotion 에서 (api 18, 4.3) 이미지상에 돌려도 잘 돌아갑니다.
저는 4.0.0.GA로 개발된 앱을 4.1.0.GA로 SDK만 바꿔서 컴파일해서 올리면,
넥서스 5 (Android 5.0.1)에서는 잘 돌아가지만, 갤럭시 s4 (Android 4.4.2)과 LTE2 (Android 4.1.2)에서는 설치는 되지만 스플래쉬 스크린 뜨다가 죽어요.
3.5.1.GA와 4.0.0.GA에서는 둘다 괜찮거든요.
물론 이게 minSDK와는 전혀 다른 문제가 원인일 수는 있다고 생각해요.
[ERROR] dalvikvm: Could not find class 'ti.modules.titanium.network.NonValidatingSSLSocketFactory', referenced from method org.appcelerator.titanium.TiVerify.run
titanium에서 android 5.x 에만 존재하는 api를 어떤부분을 썼는지가 명확하지 않으니 그게 문제네요. 사실상 android 4.x에서는 실행하기 어려운걸까요? 그나저나 한편으로 android 4.x와 5.x의 점유율이 궁금하네요.
참고로 minsdk보다 낮은 os를 쓰는 기기에서는 설치도 안되는 걸로 알고 있습니다.
그 와중에 로그를 열심히 보다가 제 경우의 원인을 찾았네요.
제 앱은 ti.map의 문제였습니다.
ti.map을 2.3.3 버전(2주전에 github에 commit됨)을 적용하니 Android 4.x에서도 돌아갑니다.
그러니 4.1.0.GA로 컴파일된 앱이 Android 4.x에서 돌아가는건 맞는것 같습니다.
하지만 다양한 문제를 겪게 될것 같네요.
4.1.0에서 추가된 Titanium.UI.ListView의 scrollend/scrollstart 이벤트가 꼭 필요한 상황이었는데 해법이 될것 같습니다.
종은님 덕분에 갑작스럽게 retry하게 되어서 감사드립니다.
1개의 좋아요
각 용어에 대해 google developer blog에 잘 정리된 글이 있어 공유합니다.
android:minSdkVersion
어플리케이션 실행에 요구되는 최소 API 레벨을 지정합니다. 지정된 값 보다 타겟 디바이스의 프레임워크 API 레벨이 더 낮은 경우, 해당 디바이스에는 앱이 설치되지 않으며 동시에 Google Play 에서 해당 앱을 검색하거나 설치할 수 없습니다. 현재, 안드로이드 시스템 API 레벨별 점유율 정보는 개발자 문서 중 안드로이드 대시보드 항목에서 확인할 수 있습니다.
android:targetSdkVersion
앱이 개발 될 때 사용되고 테스트 된 가장 최신 버전의 API 레벨을 지정하는데 사용합니다. 이 속성 값은 Google Play 를 통한 검색이나 앱 설치 가능 여부에는 영향을 미치지 않습니다. 대신, 여러분의 앱이 어떤 버전의 안드로이드 플랫폼을 타켓으로 개발되고 테스트 되었는지 알려주는 역할을 하며, 안드로이드 시스템은 해당 값을 기반으로 필요한 경우 하위 호환 기능을 적용합니다.
예를 들어 API 레벨 11 이 후 부터는 Holo 테마가 기본 시스템 테마로 변경되었습니다. 하지만, 위 그림에서 처럼 메니페스트 상의 targetSdkVersion 속성 값이 11 보다 작다면, Holo 테마가 아닌 이전 버전의 테마가 적용됩니다. 이 외에도 AsyncTask 의 동작 방식 등, targetSdkVersion 값에 따라 API 가 동작하는 방식이 달라지는 경우가 있습니다. 보다 자세한 내용은 개발자 문서의 Build.VERSION_CODES 항목을 참고하시기 바랍니다. 기본적으로, 최신 안드로이드 플랫폼의 기능을 모두 활용하고, 디바이스 사용자에게 일관된 사용자 경험을 제공할 수 있도록 targetSdkVersion 값은 적절한 테스트 후 항상 최신 API 레벨 값으로 설정하는 것이 권장됩니다.
android:maxSdkVersion
여러분의 앱이 특정 버전 이하의 안드로이드 플랫폼에서만 동작하는 경우, maxSdkVersion 속성을 사용해 특정 버전 이상의 안드로이드 플랫폼에서는 앱이 설치되지 않도록 제한할 수 있습니다. 다만, 안드로이드는 기본적으로 버전이 업데이트 되더라도 하위 호환성이 유지되기 때문에 대부분의 경우 개발자 여러분은 이 속성 값을 사용할 필요가 없습니다.