【问题标题】:My app is crashing when I use proguard obfuscation (Android Jack compiler)当我使用 proguard 混淆(Android Jack 编译器)时,我的应用程序崩溃了
【发布时间】:2016-10-04 18:44:30
【问题描述】:

我一直在我的带有 android studio 2.0 和最新可用 gradle 的 android 应用程序中使用 JACK,当我想使用 proguard 混淆代码时,我以崩溃告终,但如果我将 -dontobfuscate 放入我的 proguard 文件中,应用程序工作正常,使用 JACK 时如何混淆我的代码?

build.gradle(应用模块)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
        applicationId "com.my.personal.project"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    jackOptions {
        enabled true
    }
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles 'proguard-jack-test.txt'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
testCompile 'junit:junit:4.12'
}

Proguard 文件:

# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose


# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.

-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService

# For native methods, see      http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
    native <methods>;
}

# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}

# We want to keep methods in Activity that could be used in the XML    attribute onClick
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

# For enumeration classes, see     http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
-dontwarn android.support.**

# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep

-keep @android.support.annotation.Keep class * {*;}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep <methods>;
}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep <fields>;
}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep <init>(...);
}

请注意,如果我使用 -dontobfuscate 我的应用程序可以完美运行

LogCat:

E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.my.personal.project, PID: 19382
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.personal.project/com.my.personal.project.MainActivity}: android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:158)
                                                   at android.app.ActivityThread.main(ActivityThread.java:7225)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                Caused by: android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:380)
                                                   at android.support.v7.c.af.o(Unknown Source)
                                                   at android.support.v7.c.a.setContentView(Unknown Source)
                                                   at com.my.personal.project.MainActivity.onCreate(Unknown Source)
                                                   at android.app.Activity.performCreate(Activity.java:6876)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:158) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:7225) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView
                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:657)
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                                                   at android.support.v7.c.af.o(Unknown Source) 
                                                   at android.support.v7.c.a.setContentView(Unknown Source) 
                                                   at com.my.personal.project.MainActivity.onCreate(Unknown Source) 
                                                   at android.app.Activity.performCreate(Activity.java:6876) 
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:158) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:7225) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                Caused by: java.lang.reflect.InvocationTargetException
                                                   at java.lang.reflect.Constructor.newInstance(Native Method)
                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:631)
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                                                   at android.support.v7.c.af.o(Unknown Source) 
                                                   at android.support.v7.c.a.setContentView(Unknown Source) 
                                                   at com.my.personal.project.MainActivity.onCreate(Unknown Source) 
                                                   at android.app.Activity.performCreate(Activity.java:6876) 
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:158) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:7225) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                Caused by: android.view.InflateException: Binary XML file line #17: Binary XML file line #17: Error inflating class android.support.design.internal.NavigationMenuView
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
                                                   at android.support.design.internal.c.b(Unknown Source)
                                                   at android.support.design.widget.NavigationView.<init>(Unknown Source)
                                                   at android.support.design.widget.NavigationView.<init>(Unknown Source)
                                                   at java.lang.reflect.Constructor.newInstance(Native Method) 
                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:631) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                                                   at android.support.v7.c.af.o(Unknown Source) 
                                                   at android.support.v7.c.a.setContentView(Unknown Source) 
                                                   at com.my.personal.project.MainActivity.onCreate(Unknown Source) 
                                                   at android.app.Activity.performCreate(Activity.java:6876) 
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:158) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:7225) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class android.support.design.internal.NavigationMenuView
                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:657)
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                   at android.support.design.internal.c.b(Unknown Source) 
                                                   at android.support.design.widget.NavigationView.<init>(Unknown Source) 
                                                   at android.support.design.widget.NavigationView.<init>(Unknown Source) 
                                                   at java.lang.reflect.Constructor.newInstance(Native Method) 
                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:631) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                                                   at android.support.v7.c.af.o(Unknown Source) 
                                                   at android.support.v7.c.a.setContentView(Unknown Source) 
                                                   at com.my.personal.project.MainActivity.onCreate(Unknown Source) 
                                                   at android.app.Activity.performCreate(Activity.java:6876) 
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:158) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:7225) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                Caused by: java.lang.reflect.InvocationTargetException
                                                   at java.lang.reflect.Constructor.newInstance(Native Method)
                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:631)
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                   at android.support.design.internal.c.b(Unknown Source) 
                                                   at android.support.design.widget.NavigationView.<init>(Unknown Source) 
                                                   at android.support.design.widget.NavigationView.<init>(Unknown Source) 
                                                   at java.lang.reflect.Constructor.newInstance(Native Method) 
                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:631) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776) 
                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                                                   at android.support.v7.c.af.o(Unknown Source) 
                                                   at android.support.v7.c.a.setContentView(Unknown Source) 
                                                   at com.my.personal.project.MainActivity.onCreate(Unknown Source) 
                                                   at android.app.Activity.performCreate(Activity.java:6876) 
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:158) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:7225) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                Caused by: java.lang.VerifyError: Rejecting class android.support.v7.widget.r because it failed compile-time verification (declaration of 'android.support.v7.widget.r' appears in /data/app/com.my.personal.project-2/base.apk)
                                                   at android.support.v7.widget.bw.<init>(Unknown Source)
                                                   at android.support.design.internal.NavigationMenuView.<init>(Unknown Source)
                                                at and

【问题讨论】:

  • 混淆总是考验你的耐心和语言/框架的概念。唯一的解决方案是调试。
  • 启用 Jack 工具链时,使用内置混淆器/收缩器代替 ProGuard。
  • @T.Neidhart 但是如果我提取 .class 文件并用 IntelliJ 想法打开它,代码根本不会被混淆我什至可以看到变量名称......我可能不得不对 Jack 做一些事情来激活混淆器,但我不知道,根据此评论“如果启用 Jack 工具链,则根本不执行 ProGuard。指定的 proguard 规则由工具链本身评估和应用。” Jack 工具链使用 proguard 文件中指定的 proguard 规则,但在我的情况下,该应用程序仅在我使用“-dontobfuscate”标志时才有效......任何线索?
  • Jack 工具链的内部混淆器可能存在错误。您是否尝试禁用 Jack 并查看它在使用 ProGuard 进行混淆时是否有效?

标签: java android android-studio proguard obfuscation


【解决方案1】:

我解决了在我的 proguard 文件中添加这一行的问题

-keep public class android.support.v7.widget.** { *; }

【讨论】:

  • 是的,由于之前的三星 effingup,你不能切换到 jack 和 jill,直到大约 api 121
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多