问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

安卓编程 如何进行代码混淆

发布网友 发布时间:2022-05-03 04:40

我来回答

3个回答

懂视网 时间:2022-04-20 13:22

本篇文章给大家带来的内容是关于安全编程之Android APK打包代码混淆(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

第一步:在项目工程目录下的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'
 }
 }

热心网友 时间:2022-04-20 10:30

安卓在eclipse中的ADT已经改变原有的模式了,你在项目文件中找到这两个文件,一般在项目根目录里。

第一个文件是描述文件,第二个文件是配置文件。

如果要实现代码混淆,需要修改第二个文件。打开第二个文件,如下:

其中红线部分说,如果你要实现代码混淆,你需要把下面一行给反注释掉。

就是把红线第二行前面的#号给去掉就好了。

如果有回答不当之处,还望见谅。

热心网友 时间:2022-04-20 11:48

安卓在eclipse中的ADT已经改变原有的模式了,你在项目文件中找到这两个文件,一般在项目根目录里。

第一个文件是描述文件,第二个文件是配置文件。

如果要实现代码混淆,需要修改第二个文件。打开第二个文件,如下:

其中红线部分说,如果你要实现代码混淆,你需要把下面一行给反注释掉。

就是把红线第二行前面的#号给去掉就好了。

补充:编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到相应结果的过程。

为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。

编程:设计具备逻辑流动作用的一种"可控体系"【注:编程不一定是针对计算机程序而言的,针对具备逻辑计算力的体系,都可以算编程】

例子:①比如编写一段代码程序②编写一个控制设备体系

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
富甲天下6会出吗 梦幻西游 富甲天下 神澜出现? 口子贷款是什么 贷款中口子是什么意思 贷款 口子什么意思 什么是贷款口子 贷款里的口子指什么 贷款口子什么意思 贷款口子是什么 I,am,dfferenf翻译是什么?并且写一篇作文。 C# 代码混淆 你介绍义和团呀? 说了几千年的“五谷”,究竟是指哪些东西? 五谷说的是什么? 周公解梦1000问梦到捉泥鳅 梦见手指上有坏疤取下后留下洞却没流血 小斗士4frack(就是能拔火剑的那个)出招,如果其他的有,也告诉我 吴尊是不是文莱的王子 请帮忙取个合适的女孩英文名字~ AIDE 请问如何在编译的时候实现代码混淆 吴尊真的是文莱国的王子吗? 代码混淆,反翻译通俗易懂点是什么意思 霍比特人3主演是谁 主要演员有哪些 演员表 剧情简介 德语高手翻译 为什么有的多音节词前面加more, 但是有的却直接加er呢?(比如,friendly) 请帮忙取个女孩用的英文名字 ferren是什么意思? 工商银行 电话银行的初使密码是多少 手机工商银行重置密码是什么? 梦见自己的手指莫名其妙断了 伤口很平滑 感觉好疼 断开的手指没有丢 还在手指上我就小心翼翼的对接着 意大利语作文翻译 代码混淆不成功为什么呢? 注塑生产过程中螺杆的转速怎么控制 麻,粟,麦,豆,桑,黍茶稻哪个不是五谷说出来的 元朝怎么会被明灭了! 有机质对金属的富集作用 丧事中的撒五谷说辞 元朝怎么被明朝灭亡的:为什么元朝灭亡的最快 五谷丰登是什么动物 明朝是如何推翻元朝的? 五谷传说怎么样 无辜说别人出轨会有罪吗? 朱元璋是如何建立明朝,灭掉强大的元朝的? 人们常说的五谷分别是什么呢? 为何元朝、明朝,最终,都亡于后来的满清呢? &quot;五谷&quot;具体指哪五样? 福州送气电话多少,麻烦告知下,谢谢! 烟台福山区, 有送液化气的吗? 租罐子多少钱? 包括做饭的炉子,一瓶液化气, 共需要多少钱? 为什么说人吃五谷杂粮?是指哪些?