Каково значение compileSdkVersion в выборе реализаций и ресурсов?
Я прошу это, чтобы подтвердить мое понимание об использовании compileSdkVersion в Android.
Android sdk обеспечивает реализацию для каждой версии по пути (Ваш корень sdk)/Sdk/platform /android-(версия sdk) . Так что, если вы установите compileSdkVersion, скажем, 20, и если вы добавите класс, расширяющий Activity в вашем коде, после сборка apk apk будет упакован с использованием реализации Activity.class, взятой из (Ваш корень sdk)/Sdk/platforms/android-20/andriod.jar.
Итак, предположим, что Google добавляет метод 'public void f1()' в реализацию Activity в android-22/android.jar, и я компилирую свой код с помощью compileSdkVersion 22, и я вызываю метод f1 () из своего кода, и я собираюсь запустить приложение на устройстве с версией Android 20.
Вопрос 1: Если метод f1 () является методом уровня Java, а не тем, который вызывает реализации C/C++, будет ли он работать должным образом на устройстве?
Когда я открыл файл View.class в своей студии android с compileSdkVersion, установленным в 23, я мог видеть в списке импорта элемент 'android.widget.ScrollBarDrawable'. Но когда я вошел внутрь (Ваш корень sdk)/Sdk/platform /android-23/android.jar Я никогда не мог найти класс "ScrollBarDrawable" внутри папки виджетов (и я сталкивался со многими такими реализациями, которых нет в Android SDK, как это)
Вопрос 2: Итак, когда apk упакован, откуда сборщик apk получает реализацию android.widget.ScrollBarDrawable.class?
Извините за мой плохой английский:(
1 ответ
после сборки apk файл будет упакован с использованием реализации Activity.class, взятой из (Ваш корень sdk)/Sdk/platforms/android-20/andriod.jar
Я бы сказал так: ваш подкласс Activity
будет скомпилировано с Activity.class
в этом файле JAR. Ничего из этого JAR не входит в комплект вашего APK, за исключением final static int
значения и тому подобное, которые встроены в байт-код.
Если метод f1() является методом уровня Java, а не тем, что вызывает реализации C/C++, будет ли он работать должным образом на устройстве?
Нет, если этот метод не существует на старом устройстве.
Итак, когда пакет apk упакован, откуда сборщик apk получает реализацию android.widget.ScrollBarDrawable.class?
"Построитель apk" не знает и не заботится о таком классе, поскольку этого класса нет в Android SDK.
На устройстве другой JAR является частью пути к классу вашего приложения, который содержит фактические реализации Activity
и так далее. Содержит ли этот JAR скрытый android.widget.ScrollBarDrawable
будет зависеть от выпуска ОС, предположительно.