android - 安卓混淆代码出错

【字号: 日期:2022-11-20浏览:21作者:雯心

问题描述

我的项目中有一次使用了混淆编译,之后报错了。于是取消了混淆。但是在之后每一次编译都会报错,虽然能够正常运行。然后我又尝试了一下混淆,加入了相关规则,但是error没有减少,看起来就是规则并没有用。有没有人能指导一下哪里出问题了。谢谢

Information:Gradle tasks [:app:assembleRelease]Warning:com.qiniu.android.http.Client$1: can’t find superclass or interface okhttp3.Dns

Warning:com.qiniu.android.http.Client: can’t find referenced class okhttp3.OkHttpClient$Builder

Warning:there were 158 unresolved references to classes or interfaces.

Error Ignoring InnerClasses attribute for an anonymous inner classError:(cn.sharesdk.framework.authorize.c) that doesn’t come with anError:associated EnclosingMethod attribute. This class was probably produced by aError:compiler that did not target the modern .class file format. The recommendedError:solution is to recompile the class from source, using an up-to-date compilerError:and without specifying any '-target' type options. The consequence of ignoringError:this warning is that reflective operations on this class will incorrectlyError:indicate that it is not an inner class.

Information:1,304 errors

太多错误了贴不上了。就把类似的都删掉了

build.gradle

apply plugin: ’com.android.application’android { compileSdkVersion 22 buildToolsVersion ’23.0.3’ defaultConfig {applicationId 'com.bbt.Bobantang'minSdkVersion 15targetSdkVersion 22versionCode 3versionName '3.0.2' // multiDexEnabled true } buildTypes {debug { debuggable true}release { minifyEnabled true //取消代码混淆 http://blog.csdn.net/jdsjlzx/article/details/5186146 proguardFiles getDefaultProguardFile(’proguard-android.txt’), ’proguard-rules.pro’} } productFlavors { } compileOptions {encoding 'UTF-8' } sourceSets { main { assets.srcDirs = [’src/main/assets’, ’assets/’] } } packagingOptions {exclude ’META-INF/LICENSE.txt’exclude ’META-INF/NOTICE.txt’ } lintOptions {abortOnError false }}dependencies { compile ’com.android.support:appcompat-v7:22.2.0’ compile ’com.baoyz.swipemenulistview:library:1.3.0’ compile ’com.loopj.android:android-async-http:1.4.9’ compile ’com.zhy:percent-support-extends:1.0.1’ compile ’com.android.support:design:22.2.1’ compile ’com.nostra13.universalimageloader:universal-image-loader:1.9.5’ compile ’com.github.eluleci:flatui:3.0.0’ compile ’com.google.code.gson:gson:2.6.1’ //compile ’com.github.navasmdc:MaterialDesign:1.5@aar’ compile(’com.github.armcha:LuseenBottomNavigation:1.7.0’) {exclude module: ’appcompat-v7’ } compile ’com.android.support:cardview-v7:22.2.0’ compile(’com.github.ganfra:material-spinner:1.1.1’) {exclude group: ’com.android.support’, module: ’appcompat-v7’ } compile ’org.greenrobot:eventbus:3.0.0’ compile project(’:library_pullToRefresh’) compile project(’:onekeyshare’) compile files(’libs/baidumapapi_base_v3_7_1.jar’) compile files(’libs/baidumapapi_map_v3_7_1.jar’) compile files(’libs/baidumapapi_search_v3_7_1.jar’) compile files(’libs/locSDK_6.13.jar’) compile ’commons-codec:commons-codec:20041127.091804’ compile files(’libs/fastjson.jar’) compile project(’:photopicker’) compile files(’libs/qiniu-android-sdk-7.2.3.jar’) compile files(’libs/happy-dns-0.2.9.jar’) compile files(’libs/tbs.jar’) compile files(’libs/avoscloud-feedback-v3.14.6.jar’) compile files(’libs/avoscloud-push-v3.14.6.jar’) compile files(’libs/avoscloud-sdk-v3.14.6.jar’) compile files(’libs/avoscloud-statistics-v3.14.6.jar’) compile files(’libs/fastjson.jar’) compile files(’libs/Java-WebSocket-1.3.2-leancloud.jar’) compile files(’libs/okhttp-2.6.0-leancloud.jar’) compile files(’libs/okio-1.6.0-leancloud.jar’) compile ’com.google.protobuf:protobuf-java:2.6.1’}

proguard-rules.pro

# Add project specific ProGuard rules here.# By default, the flags in this file are appended to flags specified# in D:AppDataLocalAndroid/tools/proguard/proguard-android.txt# You can edit the include path and order by changing the proguardFiles# directive in build.gradle.## For more details, see# http://developer.android.com/guide/developing/tools/proguard.html# Add any project specific keep options here:# If your project uses WebView with JS, uncomment the following# and specify the fully qualified class name to the JavaScript interface# class:#-keepclassmembers class fqcn.of.javascript.interface.for.webview {# public *;#}-keepattributes EnclosingMethod-keepattributes InnerClasses-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService-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*(...); public void get*(...);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR;}-keepclassmembers class **.R$* { public static <fields>;}-keepclasseswithmembernames class * { native <methods>;}#-keepnames class * implements java.io.Serializable-keep public class * implements java.io.Serializable { public *;}-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}-dontwarn android.support.**#-------------------leancloud混淆规则---------------keepattributes Signature-dontwarn com.jcraft.jzlib.**-keep class com.jcraft.jzlib.** { *;}-dontwarn sun.misc.**-keep class sun.misc.** { *;}-dontwarn com.alibaba.fastjson.**-keep class com.alibaba.fastjson.** { *;}-dontwarn sun.security.**-keep class sun.security.** { *; }-dontwarn com.google.**-keep class com.google.** { *;}-dontwarn com.avos.**-keep class com.avos.** { *;}-keep public class android.net.http.SslError-keep public class android.webkit.WebViewClient-dontwarn android.webkit.WebView-dontwarn android.net.http.SslError-dontwarn android.webkit.WebViewClient-dontwarn android.support.**-dontwarn org.apache.**-keep class org.apache.** { *;}-dontwarn org.jivesoftware.smack.**-keep class org.jivesoftware.smack.** { *;}-dontwarn com.loopj.**-keep class com.loopj.** { *;}-dontwarn com.squareup.okhttp.**-keep class com.squareup.okhttp.** { *;}-keep interface com.squareup.okhttp.** { *; }-dontwarn okio.**-dontwarn org.xbill.**-keep class org.xbill.** { *;}-keepattributes *Annotation*#----------leancloud混淆规则----------------keep class com.qiniu.**{*;}-keep class com.qiniu.**{public <init>();}-ignorewarnings-dontwarn com.squareup.okhttp3.**-keep class com.squareup.okhttp3.** { *;}-dontwarn okio.**-keep class cn.sharesdk.framework.**{*;}-keep class com.baidu.** { *; }-keep class vi.com.gdi.bgl.android.**{*;}-keepattributes *Annotation*-keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>;}-keep enum org.greenrobot.eventbus.ThreadMode { *; } # Only required if you use AsyncExecutor-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { <init>(java.lang.Throwable);}#------tbs腾讯x5混淆规则-------#-optimizationpasses 7#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-dontoptimize-dontusemixedcaseclassnames-verbose-dontskipnonpubliclibraryclasses-dontskipnonpubliclibraryclassmembers-dontwarn dalvik.**#-overloadaggressively#@proguard_debug_start# ------------------ Keep LineNumbers and properties ---------------- #-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod-renamesourcefileattribute TbsSdkJava-keepattributes SourceFile,LineNumberTable#@proguard_debug_end# --------------------------------------------------------------------------# Addidional for x5.sdk classes for apps-keep class com.tencent.smtt.export.external.**{ *;}-keep class com.tencent.tbs.video.interfaces.IUserStateChangedListener { *;}-keep class com.tencent.smtt.sdk.CacheManager { public *;}-keep class com.tencent.smtt.sdk.CookieManager { public *;}-keep class com.tencent.smtt.sdk.WebHistoryItem { public *;}-keep class com.tencent.smtt.sdk.WebViewDatabase { public *;}-keep class com.tencent.smtt.sdk.WebBackForwardList { public *;}-keep public class com.tencent.smtt.sdk.WebView { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.WebView$HitTestResult { public static final <fields>; public java.lang.String getExtra(); public int getType();}-keep public class com.tencent.smtt.sdk.WebView$WebViewTransport { public <methods>;}-keep public class com.tencent.smtt.sdk.WebView$PictureListener { public <fields>; public <methods>;}-keepattributes InnerClasses-keep public enum com.tencent.smtt.sdk.WebSettings$** { *;}-keep public enum com.tencent.smtt.sdk.QbSdk$** { *;}-keep public class com.tencent.smtt.sdk.WebSettings { public *;}-keepattributes Signature-keep public class com.tencent.smtt.sdk.ValueCallback { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.WebViewClient { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.DownloadListener { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.WebChromeClient { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.WebChromeClient$FileChooserParams { public <fields>; public <methods>;}-keep class com.tencent.smtt.sdk.SystemWebChromeClient{ public *;}# 1. extension interfaces should be apparent-keep public class com.tencent.smtt.export.external.extension.interfaces.* { public protected *;}# 2. interfaces should be apparent-keep public class com.tencent.smtt.export.external.interfaces.* { public protected *;}-keep public class com.tencent.smtt.sdk.WebViewCallbackClient { public protected *;}-keep public class com.tencent.smtt.sdk.WebStorage$QuotaUpdater { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.WebIconDatabase { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.WebStorage { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.DownloadListener { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.QbSdk { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.QbSdk$PreInitCallback { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.CookieSyncManager { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.Tbs* { public <fields>; public <methods>;}-keep public class com.tencent.smtt.utils.LogFileUtils { public <fields>; public <methods>;}-keep public class com.tencent.smtt.utils.TbsLog { public <fields>; public <methods>;}-keep public class com.tencent.smtt.utils.TbsLogClient { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.CookieSyncManager { public <fields>; public <methods>;}# Added for game demos-keep public class com.tencent.smtt.sdk.TBSGamePlayer { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.TBSGamePlayerClient* { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.TBSGamePlayerClientExtension { public <fields>; public <methods>;}-keep public class com.tencent.smtt.sdk.TBSGamePlayerService* { public <fields>; public <methods>;}-keep public class com.tencent.smtt.utils.Apn { public <fields>; public <methods>;}# end-keep public class com.tencent.smtt.export.external.extension.proxy.ProxyWebViewClientExtension { public <fields>; public <methods>;}-keep class MTT.ThirdAppInfoNew { *;}-keep class com.tencent.mtt.MttTraceEvent { *;}# Game related-keep public class com.tencent.smtt.gamesdk.* { public protected *;}-keep public class com.tencent.smtt.sdk.TBSGameBooter {public <fields>;public <methods>;}-keep public class com.tencent.smtt.sdk.TBSGameBaseActivity { public protected *;}-keep public class com.tencent.smtt.sdk.TBSGameBaseActivityProxy { public protected *;}-keep public class com.tencent.smtt.gamesdk.internal.TBSGameServiceClient { public *;}#---------------------------------------------------------------------------#------------------ 下方是android平台自带的排除项,这里不要动 -----------------keep public class * extends android.app.Activity{ public <fields>; public <methods>;}-keep public class * extends android.app.Application{ public <fields>; public <methods>;}-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int);}-keepattributes *Annotation*-keepclasseswithmembernames class *{ native <methods>;}-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}#------------------ 下方是共性的排除项目 ----------------# 方法名中含有“JNI”字符的,认定是Java Native Interface方法,自动排除# 方法名中含有“JRI”字符的,认定是Java Reflection Interface方法,自动排除-keepclasseswithmembers class * { ... *JNI*(...);}-keepclasseswithmembernames class * { ... *JRI*(...);}-keep class **JNI* {*;}#----------tbs腾讯x5混淆规则-------------------

问题解答

回答1:

最近恰好在研究混淆,说点个人结论,不保证正确

不开启混淆报错是因为第三方包的原因,一般就是友盟腾讯之类的Sdk问题

开启了混淆大部分warning我认为不能消除的警告是因为sdk中jar包编译时的Jdk版本或者参数原因导致,不影响运行

报错导致app编译失败的原因是混淆参数没设置正确,我个人查阅官方文档之后认为大部分第三方sdk的混淆配置都是有错的,尤其是友盟等国内配置

我看你的报错信息中出现okhttp3的报错,可以google下相关的混淆配置,git上有个项目整理了常用的第三方库的混淆配置文件,可以参考下,不过关键还是国内的第三方sdk的混淆问题

相关文章: