建立签名apk失败与proguard(项目中的不同模块)

我需要混淆代码,但是当我尝试构建APK时,我得到一个错误“输出jar是空的,你指定了正确的”-keep“选项吗?

错误

Caused by: java.io.IOException: The output jar is empty. Did you specify the proper '-keep' options? at proguard.shrink.Shrinker.execute(Shrinker.java:186) at proguard.ProGuard.shrink(ProGuard.java:298) at proguard.ProGuard.execute(ProGuard.java:113) at com.android.build.gradle.internal.transforms.BaseProguardAction.runProguard(BaseProguardAction.java:54) at com.android.build.gradle.internal.transforms.ProGuardTransform.doMinification(ProGuardTransform.java:254) at com.android.build.gradle.internal.transforms.ProGuardTransform.access$000(ProGuardTransform.java:63) at com.android.build.gradle.internal.transforms.ProGuardTransform$1.run(ProGuardTransform.java:173) at com.android.builder.tasks.Job.runTask(Job.java:48) at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41) at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:225) 

build.gradle应用程序

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'io.fabric' android { compileSdkVersion compile_sdk_version buildToolsVersion build_tools_version defaultConfig { multiDexEnabled true applicationId application_id minSdkVersion min_sdk_version targetSdkVersion target_sdk_version versionCode version_code versionName version_name } buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main.java.srcDirs += 'src/main/kotlin' test.java.srcDirs += 'src/test/kotlin' } packagingOptions { exclude 'META-INF/LICENSE' return void } dexOptions { javaMaxHeapSize "2g" } lintOptions { checkReleaseBuilds false abortOnError false } } kapt { generateStubs = true } dependencies { compile project(':domain') compile fileTree(dir: 'libs', include: ['*.jar']) releaseCompile project(path: ':data', configuration: 'release') releaseCompile "com.squareup.leakcanary:leakcanary-android-no-op:$leak_canary_version" debugCompile project(path: ':data', configuration: 'debug') debugCompile "com.squareup.leakcanary:leakcanary-android:$leak_canary_version" testCompile "junit:junit:$junit_version" compile "com.android.support:multidex:$multidex_version" compile "com.android.support:appcompat-v7:$support_library_version" compile "com.android.support:recyclerview-v7:$support_library_version" compile "com.android.support:cardview-v7:$support_library_version" compile "com.android.support:transition:$support_library_version" compile "com.android.support:design:$support_library_version" compile "com.google.android.gms:play-services-location:$play_services_version" compile "com.android.support.constraint:constraint-layout:$constraints_layout_version" compile "com.google.firebase:firebase-core:$play_services_version" compile "com.google.firebase:firebase-messaging:$play_services_version" compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "io.reactivex.rxjava2:rxjava:$rx_java_version" compile "io.reactivex.rxjava2:rxandroid:$rx_android_version" kapt "com.google.dagger:dagger-compiler:$dagger_version" compile "com.google.dagger:dagger:$dagger_version" kapt "com.jakewharton:butterknife-compiler:$butter_knife_version" compile "com.jakewharton:butterknife:$butter_knife_version" compile "com.github.bumptech.glide:glide:$glide_version" compile "com.github.maxcruz:reactive-permissions:$reactive_permissions_versions" compile "com.github.maxcruz:fab-speed-dial:$fab_speed_dial_version" compile "com.ramotion.foldingcell:folding-cell:$folding_cell_version" compile "de.hdodenhof:circleimageview:$circle_image_view_version" compile "com.github.ganfra:material-spinner:$material_dialogs_version" compile "com.afollestad.material-dialogs:commons:$dialogs_commons_version" compile "jp.wasabeef:recyclerview-animators:$recycler_animations_version" compile "com.android.support.constraint:constraint-layout:$constraints_layout_version" compile "me.grantland:autofittextview:$autofit_textview_version" compile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') { transitive = true; } compile "com.cardiomood.android:android-widgets:$android_widgets_version" } apply plugin: 'com.google.gms.google-services' 

build.gradle数据(第二个模块)

 apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { publishNonDefault true compileSdkVersion compile_sdk_version buildToolsVersion build_tools_version defaultConfig { minSdkVersion min_sdk_version targetSdkVersion target_sdk_version versionCode version_code versionName version_name } buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main.java.srcDirs += 'src/main/kotlin' test.java.srcDirs += 'src/test/kotlin' } lintOptions { checkReleaseBuilds false abortOnError false } } kapt { generateStubs = true } dependencies { compile project(':domain') testCompile "junit:junit:$junit_version" compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "io.reactivex.rxjava2:rxjava:$rx_java_version" kapt "com.google.dagger:dagger-compiler:$dagger_version" compile "com.google.dagger:dagger:$dagger_version" compile "com.squareup.retrofit2:retrofit:$retrofit_version" compile "com.jakewharton.retrofit:retrofit2-rxjava2-adapter:$retrofit_rxjava_version" compile "com.squareup.retrofit2:converter-gson:$retrofit_version" compile "com.squareup.okhttp3:logging-interceptor:$logging_interceptor_version" testCompile 'org.testng:testng:6.9.6' } repositories { mavenCentral() } 

Proguard-rules.pro应用程序

 -keepattributes Signature # For using GSON @Expose annotation -keepattributes *Annotation* # Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { *; } # Prevent proguard from stripping interface information from TypeAdapterFactory, # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer 

proguard-rules.pro数据(2d模块)

 -dontnote retrofit2.Platform # Platform used when running on RoboVM on iOS. Will not be used at runtime. -dontnote retrofit2.Platform$IOS$MainThreadExecutor # Platform used when running on Java 8 VMs. Will not be used at runtime. -dontwarn retrofit2.Platform$Java8 # Retain generic type information for use by reflection by converters and adapters. -keepattributes Signature # Retain declared checked exceptions for use by a Proxy instance. -keepattributes Exceptions ##---------------End: proguard configuration for Retrofit ---------- ##---------------Begin: proguard configuration for Gson ---------- # Gson uses generic type information stored in a class file when working with fields. Proguard # removes such information by default, so configure it to keep all of it. -keepattributes Signature # For using GSON @Expose annotation -keepattributes *Annotation* # Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { *; } # Prevent proguard from stripping interface information from TypeAdapterFactory, # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer