3

Android gradle プラグインの使用2.2.0:

buildscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
    }

    dependencies {
        classpath "com.android.tools.build:gradle:2.2.0"
    }
}

実行中./gradlew assembleDebug assembleDebugAndroidTest

2.2.0:

app-debug.apk
app-debug-androidTest.apk

2.1.3:

app-debug.apk
app-debug-unaligned.apk
app-debug-androidTest.apk
app-debug-androidTest-unaligned.apk

この Google の問題に基づいて: https://code.google.com/p/android/issues/detail?id=212591およびここにコメント: https://code.google.com/p/android/issues/detail?id =212591#c15 :

こんにちは、整列されていない apk を生成しなくなりました。速度向上の一環として、既に調整済みの apk を生成します。したがって、2 つではなく、最後の 1 つを取得します。

Spoon は、テスト ランナーを実行するために、これらの「整列されていない」apk を必要とします。

java -jar spoon-runner-1.7.0-jar-with-dependencies.jar \
    --debug --fail-on-failure --adb-timeout 90 --no-animations \
    --apk app-debug.apk \
    --test-apk app-debug-androidTest-unaligned.apk

エラー:

12:06:48 I/InstrumentationResultParser: test run failed: 'Instrumentation run failed due to 'java.lang.NoClassDefFoundError''
2016-09-23 12:06:48 [STRL.testRunStarted] testCount=0 runName=<>.test
2016-09-23 12:06:48 [STRL.testRunFailed] errorMessage=Instrumentation run failed due to 'java.lang.NoClassDefFoundError'
2016-09-23 12:06:48 [STRL.testRunEnded] elapsedTime=0
12:06:48 I/XmlResultReporter: XML test result file generated at /<>/spoon-output/junit-reports/emulator-5554.xml. Total tests 0, 

Spoon は「unaligned」のみを取り込むようです。

Exception in thread "main" java.lang.IllegalArgumentException: Instrumentation APK path does not exist.
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
    at com.squareup.spoon.SpoonRunner$Builder.setInstrumentationApk(SpoonRunner.java:360)
    at com.squareup.spoon.SpoonRunner.main(SpoonRunner.java:657)
4

2 に答える 2

3

2.2 より前では、gradle プラグインはアライメントされていない apk を生成し、それをアライメントするために zipalign を実行していました。したがって、2 つの apk が作成され、1 つは「-unaligned」で、もう 1 つは特定のマーキングなしで整列されました。

2.2 では、これに関連するビルド パイプラインに多くの改善がありました。

  • APK は増分的にビルドされるようになりました。つまり、1 つのファイルが変更されると、そのファイルのみが APK で更新されます。
  • APK は整列して生成されるため、追加の整列手順は必要ありません。

これら 2 つの最後のものは、APK で V2 署名を有効にします ( https://source.android.com/security/apksigning/v2.html ): APK の変更に耐性のある完全な APK 署名 (および検証が高速) . これは、これらの署名が有効になっている APK で zipalign を実行できなくなったことを意味します。

要するに、2.2 以降のパッケージ化はより高速で段階的に行われ、不必要な調整されていない APK を生成しません。

于 2016-09-24T01:40:00.257 に答える
0

Have you tried setting up zipalign to false inside gradle file?

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        zipAlignEnabled false 
    }
}

You can also specify multiple buildTypes if you want

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        zipAlignEnabled false 
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
于 2016-09-23T19:15:45.857 に答える