Android打测试包testOnly一直为True的问题

最近一个老的项目要在一个低版本的设备上跑一下,设备系统是Android 4.0.4,用Android Studio联机调试安装不了报错INSTALL_FAILED_TEST_ONLY,加了参数-t也不行,用其他设备安装了这个包是没问题的,于是分析了一下,发现现在版本的AS打包出来的debug版本apkmanifest文件一直有testOnlytrue的属性,无论在manifest文件显式配置android:testOnly="false"还是在gradle配置android.injected.testOnly=false都取消不了,只好在编译打包过程强制修改manifest文件,在gradlebuildTypes添加下面过程

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用不了了,文档都翻烂了才搞定。

1 response to "Android打测试包testOnly一直为True的问题"

    By: sk Posted: 2023年12月25日

    牛逼啊,找了好久只有你这个好用

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

 桂ICP备15001694号-3