我收到INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
错误。
问题是在构建时间内应该在Android Manifest中替换的String不是。全部在我更新Gradle 2.1版后开始
在更新到Gradle 2.1(从2.0)之前,我的代码正在运行。现在我得到以下错误日志:
> Failed parse during installPackageLI
android.content.pm.PackageParser$PackageParserException: /data/app/vmdl264927358.tmp/base.apk (at Binary XML file line #16): Bad class name PACKAGE_NAME.permission.C2D_MESSAGE in package my.package.xyz
at android.content.pm.PackageParser.parseBaseApk(PackageParser.java:892)
at android.content.pm.PackageParser.parseClusterPackage(PackageParser.java:790)
at android.content.pm.PackageParser.parsePackage(PackageParser.java:754)
at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:12252)
at com.android.server.pm.PackageManagerService.-wrap25(PackageManagerService.java)
at com.android.server.pm.PackageManagerService$9.run(PackageManagerService.java:10170)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
我用来替代PACKAGE_NAME的代码是:
applicationVariants.all {variant ->
def flavor = variant.productFlavors.get(0)
def buildType = variant.buildType
variant.outputs[0].processManifest.doLast {
replaceInManifest(variant,
'PACKAGE_NAME',
[flavor.applicationId, buildType.applicationIdSuffix].findAll().join())
}
}
def replaceInManifest ( variant, fromString, toString ) {
def flavor = variant.productFlavors.get(0)
def buildtype = variant.buildType
def manifestFile = "$buildDir/intermediates/manifests/full/${flavor.name}/${buildtype.name}/AndroidManifest.xml"
def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll(fromString, toString)
new File(manifestFile).write(updatedContent, 'UTF-8')
}
在构建之后,我在文件夹/intermediates/manifests/full/${flavor.name}/${buildtype.name}/AndroidManifest.xml中检查了AndroidManifest.xml文件,所有内容都被替换了。似乎执行顺序在Gradle文件中的某些部分代码和.apk中的包装都被更改了。 你知道我要做些什么来解决这个问题吗?
答案 0 :(得分:0)
你的包裹名称是什么?我曾经有过一次,将包名更改为小案例修复了我的问题
答案 1 :(得分:0)
这是有史以来最奇怪的问题。问题是我在我的gradle脚本中偶然出现了这些行:
compile 'com.github.frankiesardo:icepick:2.3.6'
provided 'com.github.frankiesardo:icepick-processor:2.3.6'
compile 'frankiesardo:icepick:3.2.0'
provided 'frankiesardo:icepick-processor:3.2.0'
但是应用程序是在没有错误的情况下构建的,而不是在安装apk上失败。