Articles of android proguard

在启用Proguard的情况下将Play服务从8.1更新到8.3

我尝试将播放服务更新为8.3。 这是我改变的: 在根gradle文件中: dependencies { classpath ‘com.android.tools.build:gradle:1.5.0-beta1’ classpath ‘com.google.gms:google-services:1.5.0-beta2’ } 并在app gradle文件中: compile ‘com.google.android.gms:play-services-maps:8.3.0’ compile ‘com.google.android.gms:play-services-location:8.3.0’ compile ‘com.google.android.gms:play-services-base:8.3.0’ compile ‘com.google.android.gms:play-services-gcm:8.3.0’ compile ‘com.google.android.gms:play-services-analytics:8.3.0’ compile ‘com.google.android.gms:play-services-appinvite:8.3.0’ compile ‘com.google.android.gms:play-services-ads:8.3.0’ compile ‘com.google.android.gms:play-services-appindexing:8.3.0’ 它的构建正常,但它在启动时崩溃并带有以下堆栈跟踪: 11-06 17:30:17.460 2895-2895/app.example.debug E/AndroidRuntime: java.lang.RuntimeException: Unable to get provider com.google.android.gms.measurement.AppMeasurementContentProvider: java.lang.ClassNotFoundException: Didn’t find class “com.google.android.gms.measurement.AppMeasurementContentProvider” on path: DexPathList[[zip file “/system/framework/android.test.runner.jar”, zip file “/data/app/app.example.debug-1/base.apk”],nativeLibraryDirectories=[/data/app/app.example.debug-1/lib/arm, /vendor/lib, /system/lib]] 11-06 […]

使用Gradle和ProGuard的Android Build:“必须在输入jar之后指定输出jar,否则它将为空”

我正在使用Gradle创建一个具有不同风格的构建。 它一直运行到现在,直到我想启用Proguard 。 我为我的Release Build启用了minifyEnabled ,现在我有一个exception说: “ Caused by: org.gradle.internal.UncheckedException: java.io.IOException: The output jar […/app/build/intermediates/multi-dex/dev/release/componentClasses.jar] must be specified after an input jar, or it will be empty. “ 有人知道造成这种exception的原因吗? 我基本上想在发布我的应用程序之前启用ProGuard。 这是我的Gradle文件,如下所示。 lintOptions { abortOnError false } dexOptions{ incremental true javaMaxHeapSize “4g” } defaultConfig { applicationId “…” minSdkVersion 14 targetSdkVersion 22 versionCode 1 versionName “1.0” multiDexEnabled […]

proguard-android.txt和proguard-rules.pro有什么区别? – Android

在我的buildType我看到这样的: buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 我有一些问题: 为什么有两个文件? 他们有什么区别? 我应该在哪里写规则? 谢谢

Retrofit2 proguard删除参数

我使用改进2和在我的项目中使用proguard。 我的proguard: -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions -keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } # Begin twitter 4j. -dontwarn twitter4j.** -keep class twitter4j.conf.PropertyConfigurationFactory -keep class twitter4j.** { *; } # End twitter 4j. # Start androidsocialnetworks -keep class com.androidsocialnetworks.lib.** { *; } # End androidsocialnetworks. # Google api […]

Proguard问题与Gradle 3.0.0

我正在尝试使用ProGuard和新的Gradle 3.0.0版本创build一个APK。 我在我的ProGuardconfiguration文件中忽略了一些我认为被忽略的类的警告。 相同的configuration适用于Gradle 2.3.3,但似乎在3.0.0上打破。 警告非常多,几乎没有读取ProGuardconfiguration。 我的build.gradle buildscript { repositories { mavenCentral() jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'com.google.gms:google-services:3.0.0' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' } } allprojects { repositories { jcenter() maven { url 'https://jitpack.io' } maven { url 'https://maven.google.com' } } } android{ buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig […]

Android Studio更新后,ProGuard无法按预期工作

由于我更新Android Studio版本1.2.1.1我有以下问题: 每当我构build我的应用程序的发行版本/构build版本时,我都会在调整库中得到一个NoClassDefFoundError ,作为库模块包含在项目中。 追踪: java.lang.NoClassDefFoundError: com.adjust.sdk.AdjustConfig at de.myapp.GlobalApp.prepareAdjust(GlobalApp.java:111) at de.myapp.GlobalApp.onCreate(GlobalApp.java:71) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4151) at android.app.ActivityThread.access$1300(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 我的代码的相应部分: AdjustConfig config = new AdjustConfig(this, someString, otherString); 当我用minifyEnabled false;closuresProguard minifyEnabled false; 在我的build.gradle ,错误消失了。 我的proguard-rules.pro看起来像这样: -keepattributes ** -keep […]

有史以来最奇怪的Android错误 – 可能是ProGuard问题?

我甚至不知道该给什么称号,这太奇怪了。 我构build了一个使用ARGB-整数格式的颜色值的Android逻辑谜题 。 要在完成关卡时混合animation的颜色,我有以下function: public static int blend(int color1, int color2, double position) { if (position<0) position=0; if (position>1) position=1; int a = (color1 >>> 24) & 0xFF; int r = (color1 >>> 16) & 0xFF; int g = (color1 >>> 8) & 0xFF; int b = color1 & 0xFF; int da = ((color2 >>> […]

ProGuard导致应用程序滞后

我试图混淆与proguard的代码,所以我启用minify在发布构buildtypes: buildTypes { debug { minifyEnabled false } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt') } } 但是,当我生成“释放apk”,并在我安装后,应用程序运行速度减慢(滞后)..为什么这种情况发生与minify启用? 这是我的依赖: dependencies { compile 'com.android.support:support-v4:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support:palette-v7:25.3.1' compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-2' compile 'com.jrummyapps:colorpicker:2.1.6' compile 'org.apache.commons:commons-lang3:3.4' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:design:25.3.1' compile project(':library') testCompile 'junit:junit:4.12' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' androidTestCompile 'com.android.support:support-annotations:25.3.1' } 这是我的proguard-android.txt # This is a configuration file for […]

Google Play开发控制台在Stacktrace中显示类和方法名称

我有一个启用了Proguard(minifyenabled true)的应用程序,最近在Google Play开发者控制台中收到了崩溃报告。 当我看着它时,我看到了以下内容: 我很惊讶地发现第一行中的全部类和方法名称,因为Proguard已启用。 我以前总是看到这样的事情: 在com.myname.myapp.cf(未知来源) 我也很好奇行号是如何显示的,因为我不保留行编号在我的Proguardconfiguration文件(因此,为什么我通常在我的堆栈跟踪中看到“未知源”)。 我反编译我的.apk,窥视classes.dex文件,这一切看起来不错。 我find堆栈跟踪的第一行中引用的类,类名确实是模糊的,就像方法名一样。 现在,'MyActivity'(stacktrace的第2行)是我的应用程序的启动Activity,并且在Manifest中声明,所以我明白为什么它的名称没有被混淆,而'onConnected'方法不是我的(它来自Google Play游戏服务),所以,这也是可以的。 'MyMethodName' 在 onConnected中被调用,如下所示: @Override public void onConnected(Bundle arg0) { myClassObject.myMethodName(); //Where myClassObject is an instance of MyClassName } debugging设置为在我的build.gradle文件中禁用。 我不会将mapping.txtfile upload到Play控制台,我手动运行回溯以查看我的去混淆堆栈跟踪。 如果有人能帮助我理解为什么我在这里看到我的完整课程和方法名称,我将不胜感激。 我能做什么来防止这种情况?

在程序引用的proguard之后使用NoSuchMethodError崩溃

compile&proguard之前的源代码: public class IntentSession extends BaseIntentSession { @Override public void onResume() { super.onResume(); mExecutor.exec(getIntent(), this::finish); } } compile&proguard之后的反编译代码:(Decompiled with CFR 0_118) public class a extends superA { public void e() { super.e(); this.ca(this.j(), ba((a)this)); // the problematic code here } } 现在是compile&proguard之后的关键代码, b类的反编译代码: final class b implements ca { private aa; b (a a1) { […]