android – 切换到Gradle:为什么我必须保持自定义视图被混淆?

前端之家收集整理的这篇文章主要介绍了android – 切换到Gradle:为什么我必须保持自定义视图被混淆?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在把一个项目从蚂蚁转移到毕业,但有一些我根本无法想象的东西.

FACTS

在构建版本APK(即混淆)后,我注意到该应用程序崩溃严重.错误可以总结出来:

java.lang.NoSuchMethodException: <init> [class android.content.Context,interface android.util.AttributeSet]

调试(即非混淆)的APK工作正常,所以我猜测它与我的ProGuard / DexGuard配置有关.

我尝试通过添加以下语句来保持类引用:

-keep class com.mypackage.MyCustomView

因此,发布APK工作正常.然后我做了一些研究,我试过这个更具体的ProGuard / DexGuard配置:

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context,android.util.AttributeSet);
    public <init>(android.content.Context,android.util.AttributeSet,int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context,android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context,int);
}

这也是有效的,它是与阶级无关的.

我在想:

为什么我不用处理是在使用Ant?
>该错误出现的确切原因是什么? (以下是第一个问题的回答)

回答

@Blundell的答案是非常正确的.原来我从build.gradle配置中缺少一行:

android {
  ...
  buildTypes {
    debug {
      ...
    }
    release {
        proguardFile getDefaultDexGuardFile('dexguard-release.pro') # <----- this line
        proguardFile 'dexguard-project.txt'
    }
  }
}

似乎该行实际上是强制性的,因为它作为ProGuard / DexGuard的基本规则集.其实这是dexguard-release.pro文件的一部分:

-keepclassmembers !abstract class !com.google.ads.** extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context,int);
    public void set*(...);
}

-keepclassmembers !abstract class * {
    public <init>(android.content.Context,int);
}

-keepclassmembers class * extends android.content.Context {
   public void *(android.view.View);
}

我发现这个文件有点模糊,我希望它可以被修改,以清除它可能有任何歧义.总而言之,我的错.

解决方法

很可能Ant正在使用不同的配置文件,

还有Gradle你需要明确说明你还要使用Android proguard配置文件,即使用如下这样的多个规则文件

proguardFile getDefaultProguardFile('proguard-android.txt')
    proguardFile 'your/sepcific/folder/proguard.cfg'

(我记得Ant从来没有使用SDK proguard文件,以前建议复制所有的配置).

原文链接:https://www.f2er.com/android/310997.html

猜你在找的Android相关文章