Android打测试包testOnly一直为True的问题
最近一个老的项目要在一个低版本的设备上跑一下,设备系统是Android 4.0.4
,用Android Studio
联机调试安装不了报错INSTALL_FAILED_TEST_ONLY
,加了参数-t
也不行,用其他设备安装了这个包是没问题的,于是分析了一下,发现现在版本的AS
打包出来的debug
版本apk
,manifest
文件一直有testOnly
为true
的属性,无论在manifest
文件显式配置android:testOnly="false"
还是在gradle
配置android.injected.testOnly=false
都取消不了,只好在编译打包过程强制修改manifest
文件,在gradle
的buildTypes
添加下面过程
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def processManifest = output.getProcessManifestProvider().get()
processManifest.doLast { task ->
def outputDir = multiApkManifestOutputDirectory
File outputDirectory
if (outputDir instanceof File) {
outputDirectory = outputDir
} else {
outputDirectory = outputDir.get().asFile
}
File manifestOutFile = file("$outputDirectory/AndroidManifest.xml")
if (manifestOutFile.exists() && manifestOutFile.canRead() && manifestOutFile.canWrite()) {
def manifestContent = manifestOutFile.getText('UTF-8')
manifestContent = manifestContent.replaceAll("android:testOnly=\"true\"", "android:testOnly=\"false\"")
manifestOutFile.write(manifestContent, 'UTF-8')
}
}
}
}
这点代码浪费了我不少时间,这些groovy
的接口变动太多了,跨越了四五个大版本,一大堆api用不了了,文档都翻烂了才搞定。
牛逼啊,找了好久只有你这个好用