Как запустить приложение с Theme.Material на старых устройствах

? David Corsalini @ | Original: StackOverFlow
---

Как я могу запустить мое приложение на pre-v21 устройств ?

compileSdkVersion  'android-L'
minSdkVersion 14
targetSdkVersion 'L'

Я только с помощьюTheme.Material на v21 . Я не с помощью v20 Библиотека поддержки, я использую com.android.support:support-v4:19.+

При запуске приложения из Android Студия она говорит, чтоустройство в не совместимы :

{compatible=NO, reason=minSdk(API 20, L preview) != deviceSdk(API 16)}

От того, где это братьminSdk 20 ?

EDIT:

Причина это происходит может быть (если проверено), что

Если вы компилируете против предварительного просмотра SDK (Android -L ), инструменты разработки, будет   заблокировать minSdkVersion и targetSdkVersion в том же уровне API . это   Результаты в полученном применения неспособен быть установлен на   устройств, работающих более ранних версий Android, даже если ваше приложение   не делает ничего конкретного, чтобы L.

Источник: http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/

---

Top 5 ответ

1Egor N @

Если вы компилируете против предварительного просмотра SDK (Android -L ), инструменты разработки, отключающие minSdkVersion и targetSdkVersion в том же уровне API . Это приводит в полученном применения будучи не в состоянии быть установлен на устройствах под управлением более ранних версий Android, даже если ваше приложение не делает ничего конкретного, чтобы L.

Версия 0.11 от Android Gradle Plugin включен новый Манифест слияния по умолчанию, и это позволяет нам сделать некоторые http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger материал. Таким образом, вы должны добавить лет ваш AndroidManifest.xml подать использования -SDK узел, который просто определяет атрибут tools:node . Эта специфическая конфигурация говорит манифеста процессор заменить все атрибуты из uses-sdk узлов в более низким приоритетом проявляется (например, библиотеки проявляется ) с атрибутами в uses-sdk узел с атрибутом tools:node="replace" . С Gradle также вставляет minSdkVersion и targetSdkVersion от вашего build.gradle в этом uses-sdk узла, вот и все что вам действительно нужно добавить.

Таким образом, ваш AndroidManifest.xml файл должен выглядеть somehing так:

<?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 платформу немного, чтобы скрыть тот факт, что это на самом делепросмотр платформа от сборки. Вы можете скачать его из любого из этих двух зеркал :  https://docs.google.com/file/d/0B3kP5OEGFYUBZWxacV9jVjVKOGs, https://mega.co.nz/#!hlp1XTAC!seD3n0x9dkTyR29c7HxNE6XkHXtmpjfcbYrfntVOXmY .

Распакуйте архив в каталог платформах, где Вы установили 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 при сохранении обратную совместимость !

Очевидно, что решения, предоставляемые выше, хаки, в лучшем случае . Пожалуйста, таком https://code.google.com/p/android/issues/detail?id=72453&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars, Как кажется, чтобы бытьближе к сердцу проблемы (еслиAndroid команда даже считает, что это проблема вообще).

Все кредиты идут на http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/