我想知道如何从ProGuard过渡到R8.
我应该从Gradle文件中删除与Proguard相关的行并android.enableR8 = true改为添加行吗?
谢谢.
我尝试将播放服务更新为8.3.这是我改变的:
在根gradle文件中:
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0-beta1'
classpath 'com.google.gms:google-services:1.5.0-beta2'
}
Run Code Online (Sandbox Code Playgroud)
并在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'
Run Code Online (Sandbox Code Playgroud)
它正在构建正常,但它在启动时崩溃,具有以下堆栈跟踪:
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 17:30:17.460 2895-2895/app.example.debug E/AndroidRuntime: at android.app.ActivityThread.installProvider(ActivityThread.java:5156)
11-06 17:30:17.460 2895-2895/app.example.debug E/AndroidRuntime: at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
11-06 17:30:17.460 2895-2895/app.example.debug E/AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
11-06 17:30:17.460 2895-2895/app.example.debug E/AndroidRuntime: at android.app.ActivityThread.-wrap1(ActivityThread.java)
11-06 17:30:17.460 2895-2895/app.example.debug …Run Code Online (Sandbox Code Playgroud) 我试图构建一个包含La带有proguard 的库模块的应用程序,我注意到该库没有被混淆.试图理解为什么.在这个时刻,这是我的buildType:
release {
minifyEnabled false
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
Run Code Online (Sandbox Code Playgroud)
经过一些搜索后,我遇到了ConsumerProguardFiles函数,该函数指出:
ProGuard规则文件将包含在已发布的AAR中.
然后,任何使用AAR的应用程序项目都会使用这些proguard规则文件(如果启用了ProGuard).
这允许AAR指定收缩或混淆排除规则.
这仅适用于Library项目.这在Application项目中被忽略.
现在buildType,我的库La中有以下内容:
release {
minifyEnabled false
useProguard true
consumerProguardFiles 'proguard-rules.pro'
}
Run Code Online (Sandbox Code Playgroud)
现在我的库La正在使用它的proguard规则,库代码被混淆了.
所以我的问题是:
1)这种不同行为的原因是什么.为什么ProguardFiles不会混淆库的规则,而是忽略它?
2)我猜测ConsumerProguardFiles所做的是将库的规则与主应用程序proguard规则合并.这个假设是否正确?
3)简而言之:对应用程序使用proguardFiles,对库使用ConsumerProguardFiles.正确?
感谢您抽出宝贵的时间阅读!
Android发布警告
从1方法中删除无效的本地信息.消息{kind = WARNING,text =从1方法中删除无效的本地信息.,sources = [未知源文件],工具名称= Optional.of(D8)}
InnerClass注释缺少相应的EnclosingMember注释.这样的InnerClass注释被忽略.消息{kind = WARNING,text = InnerClass注释缺少相应的EnclosingMember注释.这样的InnerClass注释被忽略.,sources = [未知源文件],工具名称= Optional.of(D8)}
org.w3c.dom.bootstrap.DOMImplementationRegistry找不到类型,它是默认或静态接口方法的必需品void com.fasterxml.jackson.databind.ext.DOMSerializer.<init>()
org.w3c.dom.bootstrap.DOMImplementationRegistry未找到类型,默认或静态接口方法需要void com.fasterxml.jackson.databind.ext.DOMSerializer.<init>()消息{kind = WARNING,text = Typeorg.w3c.dom.bootstrap.DOMImplementationRegistry未找到,它是默认或静态接口方法desugaringvoid com.fasterxml.jackson.databind.ext.DOMSerializer.<init>(),sources = [/ Users/deepanshusinha/git] /OpenApp/OpenAppForce/app/build/intermediates/transforms/androidGradleClassShrinker/beta/debug/4/com/fasterxml/jackson/databind/ext/DOMSerializer.class],工具名称= Optional.of(D8)}
Java编译器警告
警告:规则`-keep public class*extends java.lang.annotation.Annotation {
对于java编译器警告,我试图修复我的proguard文件.这是我的proguard文件.让我知道如果我做错了什么.
#Start Dto#
-keep public class co.openapp.app.data.model.* {
*;
}
#End Dto#
#OkHttp3, Okio, Retrofit
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
#Start Okhttp#
-dontwarn java.nio.file.**
-dontwarn java.lang.invoke.**
-dontwarn …Run Code Online (Sandbox Code Playgroud) android compiler-warnings android-studio android-proguard android-studio-3.1
我启用了proguard并得到了:
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-io-2.4.jar:META-INF/LICENSE.txt])
Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-io-2.4.jar:META-INF/NOTICE.txt])
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-collections-3.2.1.jar:META-INF/LICENSE.txt])
Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-collections-3.2.1.jar:META-INF/NOTICE.txt])
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [joda-time-2.7-no-tzdb.jar:META-INF/LICENSE.txt])
Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [joda-time-2.7-no-tzdb.jar:META-INF/NOTICE.txt])
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-primitives-1.0.jar:META-INF/LICENSE.txt])
Warning:can't write resource [META-INF/services/javax.annotation.processing.Processor] (Duplicate zip entry [icepick-processor-2.3.6.jar:META-INF/services/javax.annotation.processing.Processor])
Warning:can't write resource [.readme] (Duplicate zip entry [classes.jar:.readme])
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry …Run Code Online (Sandbox Code Playgroud) 在我的演示项目中,proguard-rules.txt在Android工作室中不可用.
我一定错过了一些代码:
我在哪里可以找到proguard-rules.txt文件?
我想添加proguard规则
任何帮助都是适当的
谢谢
我使用以下ProGuard规则:
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { *; }
-keep class **$Properties
-keep class org.greenrobot.greendao.**
-keepclassmembers class org.greenrobot.greendao.** { *; }
# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**
# If you do not use RxJava:
-dontwarn rx.**
启动应用程序时,我收到以下崩溃日志:
java.lang.RuntimeException: Unable to create application my.app.package.MyApplication: org.greenrobot.greendao.DaoException: Could not init DAOConfig at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4569) at android.app.ActivityThread.access$1500(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) Caused by: org.greenrobot.greendao.DaoException: Could not init DAOConfig at …
一直试图找到一些有关新设计支持库所需规则的信息,以便通过proguard.我找不到任何有关它的信息.
结束使用这些规则:
-keep class android.support.design.widget.** { *; }
-keep interface android.support.design.widget.** { *; }
-dontwarn android.support.design.**
Run Code Online (Sandbox Code Playgroud)
这些规则似乎有效,但我不确定是否有更好的规则或它是否适用于设计支持库中的所有类
我正在使用带有Proguard的Dagger2 android-support库但由于这个错误我无法编译我的项目:
Warning:dagger.android.AndroidInjector: can't find referenced class com.google.errorprone.annotations.DoNotMock
Warning:dagger.android.AndroidInjector$Builder: can't find referenced class com.google.errorprone.annotations.DoNotMock
Warning:dagger.android.AndroidInjector$Factory: can't find referenced class com.google.errorprone.annotations.DoNotMock
Warning:dagger.android.DaggerApplication: can't find referenced class com.google.errorprone.annotations.ForOverride
Warning:dagger.android.DispatchingAndroidInjector: can't find referenced class com.google.errorprone.annotations.CanIgnoreReturnValue
Warning:there were 5 unresolved references to classes or interfaces.
Run Code Online (Sandbox Code Playgroud)
我正在使用的Dagger版本是2.11.
问题是我应该为Dagger2 android-support库使用Proguard规则?
android ×10
android-proguard ×10
proguard ×3
dagger ×1
dagger-2 ×1
greendao ×1
obfuscation ×1
r8 ×1