mjo*_*osh 17 android android-7.0-nougat
我正在尝试API 22在将compileSdkVersion更新为N但无法执行此操作后在设备上运行APK .
compileSdkVersion 'android-N'
buildToolsVersion "24.0.0 rc1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 'N'
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 17
开箱即用,构建工具设置为阻止您在旧设备上运行N Developer Preview应用程序.据推测,这是谷歌试图阻止人们发布预览内容的一种草率方式.在过去的两个开发人员预览中也使用了这种方法.因此,Google不希望您在Android 5.0(API Level 22)设备上测试N Developer Preview应用程序,以确定您是否正确处理向后兼容性.
¯\ _(ツ)_ /¯
幸运的是,你可以破解一个解决方案:
android {
compileSdkVersion 'android-N'
buildToolsVersion "24.0.0 rc1"
defaultConfig {
minSdkVersion 15
targetSdkVersion 'N'
}
// based on http://stackoverflow.com/a/27372806/115145
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processManifest.doLast {
def manifestOutFile = output.processManifest.manifestOutputFile
def xml = new XmlParser().parse(manifestOutFile)
def usesSdk = xml.'uses-sdk'
usesSdk.replaceNode{
'uses-sdk'('android:minSdkVersion': '15',
'android:targetSdkVersion': '15')
}
def fw=new FileWriter(manifestOutFile.toString())
new XmlNodePrinter(new PrintWriter(fw)).print(xml)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些工具需要什么targetSdkVersion 'N',这就是破坏您在旧设备上运行应用程序的能力.因此,这个大块的Groovy代码允许构建工具开始targetSdkVersion 'N',然后targetSdkVersion在打包之前将另一个值交换到生成的清单中.在这种情况下,我将minSdkVersion和设置targetSdkVersion为15,但您可以用自己的值替换.此外,您还需要重建或清理项目才能使更改生效.
从好的方面来说,生成的应用程序可以在较旧的Android设备上安装和运行(尽管可能只通过命令行构建;我认为Android Studio不喜欢这种技术).
在负面,您targetSdkVersion实际上不会N,这可能会影响N Developer Preview设备上的某些行为.您可能希望设置用于向后兼容性测试的特定构建类型,并且仅对该构建类型执行hack-the-manifest技巧.然后,您可以使用官方N Developer Preview设置进行测试,并在一个版本中执行一些向后兼容性测试.
| 归档时间: |
|
| 查看次数: |
8336 次 |
| 最近记录: |