Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 什么';在这种情况下使用Proguard进行签名有什么问题? 背景_Android_Android Studio_Apk_Proguard - Fatal编程技术网

Android 什么';在这种情况下使用Proguard进行签名有什么问题? 背景

Android 什么';在这种情况下使用Proguard进行签名有什么问题? 背景,android,android-studio,apk,proguard,Android,Android Studio,Apk,Proguard,最近我开发了一个新应用程序,当我试图生成一个签名的APK时,我注意到一个奇怪的行为: 项目文件夹中的任何位置都没有映射文件 在gradle文件中启用最小化标志(“minifyEnabled”和“shrinkResources”)时,显示了一个错误: 错误:任务的执行失败 “:app:transformClassesAndResourcesWithProguardForRelease” 作业失败,有关详细信息,请参阅日志 问题 问题是,我没有向项目添加任何可能导致Proguard规则不起作用的

最近我开发了一个新应用程序,当我试图生成一个签名的APK时,我注意到一个奇怪的行为:

  • 项目文件夹中的任何位置都没有映射文件
  • 在gradle文件中启用最小化标志(“minifyEnabled”和“shrinkResources”)时,显示了一个错误:
错误:任务的执行失败 “:app:transformClassesAndResourcesWithProguardForRelease”

作业失败,有关详细信息,请参阅日志

问题 问题是,我没有向项目添加任何可能导致Proguard规则不起作用的特殊内容。所有内容都以默认方式使用

以下是应用程序gradle文件(将一些文件替换为“…”):

正如你所看到的,它和原来的差不多

这是project gradle文件:

//顶级生成文件,您可以在其中添加所有子项目/模块通用的配置选项

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0-rc1'
        classpath 'com.google.gms:google-services:3.0.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
        maven {
            url 'https://dl.bintray.com/baole/maven'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
这里也没什么特别的

我试过的 我还尝试将该项目与我的另一个项目进行比较,该项目与Proguard没有任何问题,但我找不到它们之间的任何特殊区别

问题
为什么当我在应用程序上签名时Proguard不能开始工作?我应该怎么做才能使特殊标志也起作用?

可能是app.gradle中的某些依赖项导致了这种情况,因为无法导入或引用类。您可以在“错误:任务执行失败”:app:transformClasseSandreSourceWithProguardForRelease.”行之前/之后看到导入或引用错误。这个问题的解决方案不是通过修改proguard规则来缩小这种依赖关系,就像这样

-keep class com.itextpdf.** { *; }
-dontwarn com.itextpdf.**

是一个类似的问题。

我在proguard文件中找到了导致它的原因:

-keep class com.google.android.gms.** {  ; }
解决办法是:

-keep class com.google.android.gms.** {  *; }

但是一个非常类似的项目已经启用了那些没有任何问题的项目。另外,即使它们被禁用,我也看不到映射文件,我认为这意味着proguard没有在allok中混淆它是一个proguard文件问题。我想我已经修复了它(创建了映射文件)。你能告诉我你觉得怎么样吗?这是正确的。如果这对你有帮助,别忘了投赞成票:)它没有帮助。但是,由于它是相似的,我将给它+1.5%的票数作为领先小姐的头衔。签约对职业后卫没有任何作用。如果在调试版本上启用Proguard,您可能会遇到这个问题。@默认情况下,Alpha签名使用Proguard。实际上,问题是Proguard规则有一行错误的代码,我从我使用的一个库中复制了它。所有我认为引起问题的事情都没问题。只有Proguard规则不适用。无论如何,我现在将更新标题。将我的投票更新为upvote@Alpha对不起,谢谢你。我只是对这个问题的原因感到困惑,结果发现我找错了地方,有一个非常简单的解决方法。
-keep class com.google.android.gms.** {  *; }