如何在旧设备上使用Theme.Material启动应用程序

如何在pre-v21设备上运行我的应用程序?

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

我只在v21上使用Theme.Material 。 我不使用v20支持库,我正在使用com.android.support:support-v4:19.+

从Android Studio运行应用程序时,它表示该设备不兼容:

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

从哪里采取minSdk 20

编辑:

这种情况发生的原因可能是(如果validation)

如果您针对预览SDK(android-L)进行编译,构build工具将会将minSdkVersion和targetSdkVersionlocking到相同的API级别。 这会导致生成的应用程序无法安装在运行Android旧版本的设备上,即使您的应用程序没有执行特定于L的任何操作。

来源: Reddit

Solutions Collecting From Web of "如何在旧设备上使用Theme.Material启动应用程序"

如果您针对预览SDK(android-L)进行编译,构build工具将会将minSdkVersiontargetSdkVersionlocking到相同的API级别。 这会导致生成的应用程序无法安装在运行Android旧版本的设备上,即使您的应用程序没有执行特定于L的任何操作。

Android Gradle插件0.11版默认打开了一个新的Manifest Merger,它允许我们做一些漂亮的东西。 所以你必须在AndroidManifest.xml文件中添加一个uses-sdk节点,该节点只需指定一个tools:node属性即可。
这个特定的configuration告诉清单处理器uses-sdk tools:node="replace"属性tools:node="replace" uses-sdk节点中的属性与低优先级清单(例如库清单)中的uses-sdk节点的任何属性。 由于Gradle还会将targetSdkVersion minSdkVersiontargetSdkVersion插入到这个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平台,以隐藏其实际上是构build工具的预览平台。 您可以从这两个镜像中的任何一个下载镜像: 镜像#1 , 镜像#2 。

将存档提取到安装了Android SDK的平台目录中。 你会注意到我已经把它命名为android-21 ,并将API级别设置为21 。 而不是在你的build.gradle中引用Landroid-L ,只需使用21

 android { compileSdkVersion 21 buildToolsVersion '20.0.0' defaultConfig { applicationId 'net.eringle.android.ldemo' minSdkVersion 15 targetSdkVersion 21 versionCode 1 versionName '1.0' } ... } 

现在,当您构build并尝试运行应用程序时,您应该可以将其发送到较旧的平台设备,而不会出现任何问题。 玩得开心,同时保持向后兼容!


显然,上面提供的解决方法是最好的。 请明确这个问题 ,因为它似乎是最接近问题的核心(如果Android团队甚至认为它是一个问题)。

所有的学分都去EddieRingle