2017-03-24 15 views
3

私は成功した私のbuild.gradleファイルに次のコードを追加することで、ABIによってそれらを分割し、それぞれに異なるversionCodeを割り当て、Androidのスタジオでの署名のAPKを生成しています:今分割されたAPKのAndroid ProGuard複数マッピングファイル

// Map for the version code that gives each ABI a value. 
ext.abiCodes = ["armeabi-v7a":1, "arm64-v8a":2, "x86":3, "x86_64":4] 

import com.android.build.OutputFile 

// For each APK output variant, override versionCode with a combination of 
// ext.abiCodes + variant.versionCode. In this example, variant.versionCode 
// is equal to defaultConfig.versionCode. If you configure product flavors that 
// define their own versionCode, variant.versionCode uses that value instead. 
android.applicationVariants.all { variant -> 

    // Assigns a different version code for each output APK 
    // other than the universal APK. 
    variant.outputs.each { output -> 
     // Stores the value of ext.abiCodes that is associated with the ABI for this variant. 
     def baseAbiVersionCode = 
       // Determines the ABI for this variant and returns the mapped value. 
       project.ext.abiCodes.get(output.getFilter(OutputFile.ABI)) 

     // Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes, 
     // the following code does not override the version code for universal APKs. 
     // However, because we want universal APKs to have the lowest version code, 
     // this outcome is desirable. 
     if (baseAbiVersionCode != null) { 

      // Assigns the new version code to versionCodeOverride, which changes the version code 
      // for only the output APK, not for the variant itself. Skipping this step simply 
      // causes Gradle to use the value of variant.versionCode for the APK. 
      output.versionCodeOverride = 
        baseAbiVersionCode + variant.versionCode 
     } 
    } 
} 

、私はProGuardのを使用したい(minifyEnabled true )私のコードを難読化する。 official android documentationに記載されているとおり、Google Playデベロッパーコンソールで受け取ったクラッシュレポートの難読化されたスタックトレースを復号化するために、リリースするAPKごとにmapping.txtファイルを保存することが重要です。しかし、ABIで分割されたAPKを生成すると、<module-name>/build/outputs/mapping/release/ディレクトリにあるmapping.txtというファイルが1つしか見つかりません。

私の質問:誰かがこの単一mapping.txtファイルは、私はABIによって分割された4つのAPKのための難読化されたスタックトレースをデコードできるようになることを確認していただけますか?そうでない場合は、4つの異なるマッピングファイルをどのように生成できますか?

私は基本的にコピーして、それらがマルチAPK生成プロセス中に作成されたが、私はまだただ1つのマッピングファイルを取得しているよう mapping.txtファイルの名前を変更しようと、私は this postで見つかったスニペットに基づいて、異なるマッピングファイルを生成しようとした

applicationVariants.all { variant -> 
    if (variant.getBuildType().isMinifyEnabled()) { 
     variant.assemble.doLast { 
      copy { 
       from variant.mappingFile 
       into "${rootDir}/proguardTools" 
       rename { String fileName -> 
        "mapping-${variant.name}.txt" 
       } 
      } 
     } 
    } 
} 

私はgradleに非常に慣れていて、その構文がかなり混乱しています。どんな助けも非常に高く評価されるでしょう。

+0

'ABIによって分割された4つのAPKの難読化されたスタックトレースをこの単一のmapping.txtファイルで解読できると誰かが確認できますか?'なぜあなたは難消化しようとしませんか? – azizbekian

+0

@azizbekianそれは、プレイストアにアプリのテスト版をデプロイする必要がないことに気づいたときにやったことです。 – Marcino

答えて

0

私はFirebaseクラッシュレポートを使ってスタックトレースの難読化をテストしました(つまり、私のアプリのクラッシュテストバージョンをGoogleプレイストアにデプロイする必要はありません)。mapping.txtというファイルが作成されましたAndroidスタジオのAPKは、さまざまなABIタイプに対応するAPKで発生するクラッシュのスタックトレースを正しく破損解除します。

関連する問題