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

发表回复

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

 桂ICP备15001694号-3