Ответ 1
Если вы скомпилируете файл предварительного просмотра SDK (android-L), инструменты сборки заблокируют minSdkVersion
и targetSdkVersion
до того же уровня API. Это приводит к тому, что созданное приложение не может быть установлено на устройствах с более ранними версиями Android, даже если ваше приложение ничего не делает для L.
Версия 0.11 плагина Android Gradle по умолчанию включила новое слияние манифеста, и это позволяет нам сделать отличный файл, Поэтому вы должны добавить yo в свой AndroidManifest.xml
файл use-sdk node, который просто указывает атрибут tools:node
.
Эта конкретная конфигурация сообщает процессору манифеста заменить любые атрибуты из узлов uses-sdk
в манифестах с меньшим приоритетом (например, манифесты библиотеки) с атрибутами в uses-sdk
node с атрибутом tools:node="replace"
. Поскольку Gradle также вставляет minSdkVersion
и targetSdkVersion
из вашего build.gradle
в этот uses-sdk
node, все, что вам действительно нужно добавить.
Итак, ваш файл AndroidManifest.xml
должен выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="net.eringle.android.ldemo">
<uses-sdk
tools:node="replace" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Теперь вы должны иметь возможность запускать приложение на любом устройстве, поддерживаемом вашим minSdkVersion, используя при этом опрятные новые представления и утилит в поддержке lib!
Далее, я немного изменил платформу Android L, чтобы скрыть тот факт, что на самом деле это платформа предварительного просмотра из инструментов сборки. Вы можете загрузить его из любого из этих двух зеркал: зеркало # 1, зеркало # 2.
Извлеките архив в каталог платформ, где установлен Android SDK. Вы заметите, что я назвал его android-21
и установил уровень API на 21
. Вместо ссылки L
или android-L
на build.gradle
просто используйте 21
:
android {
compileSdkVersion 21
buildToolsVersion '20.0.0'
defaultConfig {
applicationId 'net.eringle.android.ldemo'
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName '1.0'
}
...
}
Теперь, когда вы создаете и пытаетесь запустить приложение, вы можете отправить его на устройства более старой платформы без каких-либо проблем. Получайте удовольствие, играя с L, сохраняя обратную совместимость!
Очевидно, что обходные решения, описанные выше, в лучшем случае являются хаками. Пожалуйста, запустите этот issue, поскольку он, кажется, ближе всего к сердцу проблемы (если команда Android даже считает это проблемой вообще).
Все кредиты передаются EddieRingle