2016-05-10 5 views
2

INSTALL_PARSE_FAILED_MANIFEST_MALFORMEDエラーが発生しています。 問題は、ビルド時にAndroid Manifestで置き換える必要がある文字列ではないことです。すべてがGradleバージョン2.1を更新した後に開始されました Gradle 2.1(2.0以降)にアップデートする前に、私のコードが動作していました。今、私は次のエラー・ログを取得しています:私はPACKAGE_NAMEをraplaceするために使用していますビルド時のマニフェストの文字列をGradle 2.1で置換しない

> 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) 

コードは次のとおりです。私は/フル/フォルダ/中間体/マニフェストでのAndroidManifest.xmlファイルをチェックビルドした後

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') 
} 

$ {flavor.name}/$ {buildtype.name} /AndroidManifest.xmlと置き換えられました。 .apkのGradleファイルとパッケージ内のコードの一部が変更されたようです。 この問題を解決するために何をすべきか知っていますか?

答えて

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をインストールに失敗したよりも構築しました。

0

パッケージ名は何ですか?私はこれを一度しか持っていなかったし、パッケージ名を小文字に変更することで問題は解決した。

+0

パッケージ名は小文字であるため、問題はありません。名前=「PACKAGE_NAME.permission.C2D_MESSAGE」 \t \tアンドロイド::のProtectionLevel =」 –

+0

あなたは – TheAppchemist

+0

問題がAndroidManifestではありません、あなたのマニフェストファイルを掲示する気ですか、問題はGradleのスクリプトがラインにPACKAGE_NAMEを交換 '<許可アンドロイドいないということですマニフェストの "signature" /> –