平安编程之Android APK打包代码混同(代码实例)
发布时间:09/01 来源:未知 浏览:
关键词:
第一步:在项目工程名目下的proguard-rules.pro文件中配置自定义的混淆规则
#留意: #1.援用外部的jar包 假如不是本人写的最好不混淆它们,由于外部jar包有大概已经混淆过 #2.不要混淆XML规划中使用的自定义控件类,混淆后加载规划会报寻不到该控件错误 #3.不要混淆Manifests中配置的组件类,混淆后系统会寻因不到该组件而报错 #------------------------------------------------------------------ #指定代码的紧缩级别 -optimizationpasses 5 #表示混淆时不使用大小写混合类名,混淆后的类名为小写 -dontusemixedcaseclassnames #表示不停止优化,倡议使用此选项,由于按照proguard-android-optimize.txt中的描写,优化大概会造成一些潜在风险,不克不及包管在所有版本的Dalvik上都正常运转。 -dontoptimize # 混淆时输出日志 -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 #表示不混淆任何包括native办法的类的类名乃至native办法名 -keepclasseswithmembernames class * { native <methods>; } #表示不混淆任何一个View中的setXxx()和getXxx()办法,由于属性动画需要有响应的setter和getter的办法实现,混淆了就没法工作了。 -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } #表示不混淆Activity中参数是View的办法,由于有这样一种用途,在XML中配置android:onClick=”buttonClick”属性,当会员点击该按钮时就会调取Activity中的buttonClick(View view)办法,假如这个办法被混淆的话就寻不到了。 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } #表示不混淆枚举中的values()和valueOf()办法 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #表示不混淆Parcelable实现类中的CREATOR字段,毫无疑问,CREATOR字段是绝对不克不及改动的,包罗大小写都不克不及变,不然整个Parcelable工作机制都会失败。 -keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator CREATOR; } #表示不混淆R文件中的所有静态字段,我们都知道R文件是通过字段来记载每个资源的id的,字段名如果被混淆了,id也就寻不着了。 -keepclassmembers class **.R$* { public static <fields>; } #保持自定义控件类不被混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } #保持自定义控件类不被混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } #过滤掉本人编写的实体类乃至自定义控件类 -keep class com.beacon.supertool.bean.**{*;} -keep class com.beacon.supertool.widget.**{*;} #不需要混淆第三方类库 -dontwarn android.support.v4.** #去除警告 -keep class android.support.v4.** { *; } #过滤android.support.v4 -keep interface android.support.v4.app.** { *; } -keep public class * extends android.support.v4.** -keep public class * extends android.app.Fragment #不需要混淆butterknife -dontwarn butterknife.** -keep class butterknife.** { *;} #不需要混淆gson -dontwarn com.google.** -keep class com.google.gson.** {*;} #不需要混淆glide -dontwarn com.bumptech.glide.** -keep class com.bumptech.glide.** {*;} #不需要混淆okhttp3 okio -dontwarn okhttp3.** -keep class okhttp3.** {*;} -dontwarn okio.** -keep class okio.** {*;} #不需要混淆第三方库库或jar......
第二步:在项目工程名目下的build.gradle文件中修改
buildTypes { // debug版本的配置 debug { versionNameSuffix "-debug" minifyEnabled false zipAlignEnabled false shrinkResources false signingConfig signingConfigs.debug } // release版本的配置 release { // 不显示Log buildConfigField "boolean", "LOG_DEBUG", "false" //混淆 minifyEnabled true //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
以上就是对平安编程之Android APK打包代码混淆(代码实例)的全部介绍,假如您想理解更多有关HTML视频教程,请关注PHP中文网。
以上就是平安编程之Android APK打包代码混淆(代码实例)的具体内容,更多请关注百分百源码网其它相关文章!