Если вы компилируете предварительную версию SDK (Android-L), инструменты сборки заблокируют minSdkVersion
и targetSdkVersion
на том же уровне API. Это приводит к тому, что созданное приложение невозможно установить на устройства с более ранними версиями Android, даже если ваше приложение не делает ничего конкретного для L.
В версии 0.11 Android Gradle Plugin по умолчанию включено новое слияние манифестов, что позволяет нам выполнять некоторые отличные вещи. Таким образом, вы должны добавить в свой AndroidManifest.xml
файл узел uses-sdk, который просто указывает атрибут tools:node
.
Эта конкретная конфигурация указывает обработчику манифеста заменить любые атрибуты из uses-sdk
узлов в манифестах с более низким приоритетом (таких как библиотечные манифесты) на атрибуты в узле uses-sdk
с атрибутом tools:node="replace"
. Поскольку Gradle также вставляет minSdkVersion
и targetSdkVersion
из вашего узла build.gradle
в этот узел uses-sdk
, это все, что вам действительно нужно добавить.
Итак, ваш файл 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, используя при этом новые удобные представления и утилиты в библиотеке поддержки!
Затем я немного модифицировал платформу 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, сохраняя при этом обратную совместимость!
Очевидно, что обходные пути, представленные выше, в лучшем случае являются хаками. Пометьте эту ошибку, так как он кажется наиболее близким к сути проблемы (если команда Android вообще считает это проблемой).
Все заслуги принадлежат Эдди Ринглу
person
Egor Neliuba
schedule
27.06.2014
gradle dependencies
(или./gradlew dependencies
). Не уверен, как вы добираетесь до него из самой AS. - person CommonsWare   schedule 27.06.2014