首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android开发笔记之 Android代码混淆打包

那就让我们了解下这个东西吧 作用:为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译 缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错...所以使用proguard,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。...} 使用给定文件中的关键字作为要混淆方法的名称 -overloadaggressively 混淆应用侵入式重载 -useuniqueclassmembernames 确定统一的混淆的成员名称来增加混淆...:proguard-project.txt”这行前的“#”删除即可; 2.修改混淆配置文件:找到项目根目录下的proguard-project.txt文件,修 改其中代码,这部分是最关键; 3.保存相关文件供以后出错使用...:主要有导出的apk文件、项目根目录下 的proguard目录下的文件(主要的是mapping.txt)和项目源码; 4.项目运行过程出错处理:根据错误信息和第3步中保存的mapping定位错 误位置。

74920

android代码混淆

缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。 一, 我们用到反射的地方。...所以使用proguard,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。...2,运行错误,当code 不能混淆的时候,我们必须要正确配置,否则程序会运行出错,这种情况问题最多。 3,调试苦难,出错了,错误堆栈是混淆后的代码 ,自己也看不懂。...{package_name}    重新包装所有重命名的文件中放在给定的单一包中 -dontusemixedcaseclassnames    混淆不会产生形形色色的名 -keepattributes...-optimizationpasses 5 -dontusemixedcaseclassnames 【混淆不会产生形形色色的名 】 -dontskipnonpubliclibraryclasses

1.5K80
您找到你想要的搜索结果了吗?
是的
没有找到

Android 代码混淆机制

dontusemixedcaseclassnames #是否使用大小写混合 -dontskipnonpubliclibraryclasses #是否混淆第三方jar -dontpreverify #混淆是否做预校验...(可去掉加快混淆速度) -verbose #混淆是否记录日志(混淆后生产映射文件 map 名 -> 转化后名的映射 -optimizations !...libraryjars libs/armeabi-v7a/libijkffmpeg.so 打包测试 编写完混淆脚本后就可以直接用eclipse签名打包出APK文件了,但是有时候可能有混淆脚本有错误或遗漏,导致打包失败的情况...还有一种情况是可以正常打包出APK文件,但是不一定能运行,能运行也会在某一步上出错,这种情况一般是因为把代码中不可混淆的字段或文件给混淆了比如引入的jar包和so文件等,导致程序功能变化。...检测测试混淆后的jar文件 如果混淆过程中出错,可以在View configuration查看错误日志,然后直接通过文本编辑器打开混淆配置文件,然后进行相应修改。

1.4K20

APK体积优化有感

ps:就是借鉴了编译器的做法 冗余代码消除 赋值 JVM在加载阶段会确保全局,static变量赋默认值,如果定义的时候已经进行赋默认值那么这个赋值是冗余的,所以要消除这种赋值 确认目标: Filed是当前的变量...5.遍历完整个字节码之后进行统一删除 删除无用代码 一.使用proguard 的 -assumenosideeffects配置消除无副作用的函数调用 当方法不会修改堆上某个对象或者栈上方法参数的值,...kotlin提出inline可能最主要的问题是基于Lambda无法实现像Java那样运行时替换的方法,只能创建匿名实现,嵌套过多的Lambda又会导致性能降低创建过多无用实例对象,可能是被迫提出的inline...因此在我们最终的 APK 中,R.class 仍然存在,这造成了我们包体积的膨胀。...多个 DEX 会导致 DEX 中的复用数据变少,从而进一步提升了包体积的膨胀。因此我们对于 R 的优化,在 DEX 层面上也会有很大的收益。 处理 R文件Field消除

62030

Android开发笔记(七十三)代码混淆与反破解

#混淆是否做预校验 -dontpreverify #混淆是否记录日志 -verbose #混淆所采用的算法 -optimizations !...4、jar包的文件名中不要有特殊字符,比如说“(”、“)”等字符在混淆就会报错,文件名最好只包含字母、横线、小数点。 5、使用WebView,会被js调用的和方法,要屏蔽混淆。...下面是打包apk的md5签名值的截图 ? 下面是app运行时获取到的md5签名截图 ? 花指令 代码混淆通过对名和方法名重命名,只是加大了破解的难度,但并不能完全阻止代码被破解。...有个办法就是通过让反编译程序出错,使得代码破解失败,花指令便是这样一种思想。...花指令(junk code)意思是程序中加入一些与业务无关的指令,希望在反汇编的时候出错,让破解者无法正确地进行反汇编工作,从而迷失方向。

1.8K40

混淆代码app打包

.** gson包屏蔽代码混淆不能混淆相关的bean不然会出现解析错误,无法解析 ##---------------Begin: proguard configuration for Gson  -...Proguard # removes such information by default, so configure it to keep all of it.....** 还要配置 default.properties 把proguard.config = proguard.cfg 加上 -ignorewarnings 屏蔽warning警告日志,脚本中把这行注释去掉...Android导入第三方jar包,proguard混淆脚本(屏蔽警告,不混淆第三方包) 最近1个项目中 需要导入移动MM的第三方计费包,混淆用到了如下脚本,可屏蔽警告,不混淆第三方包指定内容。...class/merging/* //这1句是导入第三方的库,防止混淆时候读取包内容出错,脚本中把这行注释去掉

1.1K30

Android 混淆从入门到精通

ProGuard作用 压缩(Shrinking):默认开启,用以减小应用体积,移除未被使用的和成员,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的和成员)。...原则上,代码混淆后越乱越无规律越好,但有些地方我们是要避免混淆的,否则程序运行就会出错,所以就有了下面我们要教大家的,如何让自己的部分代码避免混淆从而防止出错。...移除是指在压缩(Shrinking)是否会被删除。...自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的; 与服务端交互,使用GSON、fastjson等框架解析服务端数据...,所写的JSON对象不混淆,否则无法将JSON解析成对应的对象; 使用第三方开源库或者引用其他第三方的SDK包,如果有特别要求,也需要在混淆文件中加入对应的混淆规则; 有用到WebView的JS调用也需要保证写的接口方法不混淆

1.4K90

Duang~ Android堆栈慘遭毁容?精神哥揭露毁容真相!

但,有经验的同学童鞋应该能看出来,这个堆栈是被Proguard还原过的! 怎么看?很简单,出错JVM生成的堆栈中每一个"方法描述",只有“方法名”而没有“方法返回类型”及“方法参数”。...如图3所示,我们发布源码信息会先经过javac编译,再经过proguard混淆,才被打包进发布的apk中,最终Crash崩溃后Bugly获取到的堆栈中有木有源码及行号就要看这两步了。 ?...因为它可以是proguard.retrace.Class_Promoted下的方法void doClass1(int),也可以是void doClass1()。...如图7,大家看到mapping文件中多了“数字:数字”这类内容,这个就是行号,也就是说proguard.retrace.a中24行到26行属于void doClass(int)方法 ,29到31行属于...精神哥总结 Proguard作为非常优秀的工具,让我们安装包体积变小了,代码混淆更安全了,代码裁剪优化速度更快了,但确实也埋下了一些坑,增加了我们定位崩溃的成本。

1.3K50

ProGuard 在 Android 上的使用姿势

当一些和方法会被动态访问到时(如使用反射),在某些情况下,ProGuard 在构建调用图不能正确的决定他们的「生死」,导致这些代码被错误的移除掉。...不幸的是,ProGuard 可能会发现一些引用的缺失,并给予告警,导致您的构建失败。 修复这个问题的关键是仔细观察构建输出的消息,理解这些警告的内容并定位他们。...这会在下面的场景中发生: 当 ProGuard 移除过多的 在某些情况下,ProGuard 并不知道一个或者方法被使用了,例如这个仅在反射被使用或者仅在 XML 中被引用。...当运行时发生了 ClassNotFoundException 或 MethodNotFoundException 异常意味着您肯定缺失了某些或者方法,也许是 ProGuard 移除了他们,又或者是因为错误配置依赖而导致无法找到他们...ProGuard 和 混淆后的堆栈 我之前提及到,在构建过程中 ProGuard 会在处理文件输出映射关系和日志文件。当您需要保留构建产物,您应当保存好这些文件和 APK 在一起。

2.5K40

Android插件化、热补丁中绕不开的ProGuard的坑

ProGuard简介 ProGuard是2002年由比利程序员Eric Lafortune发布的一款优秀的开源代码优化、混淆工具,适用于Java和Android应用,目标是让程序更小,运行更快,在Java...背景 在我们实施插件化、热补丁修复,为了让插件、补丁和原来的宿主兼容,必须依赖ProGuard的applymapping功能的进行增量混淆,但在使用ProGuard的applymapping时会遇到部分方法混淆错乱的问题...现象 下面是在使用-applymapping之后ProGuard输出的警告信息,同时我们发现在使用-applymapping得到的混淆结果中这些方法的名称都和原来宿主混淆结果的名称不一致的现象,导致使用...ProGuard对Class输入分为两,一是ProgramClass,另一是LibraryClass。...初始化 ProGuard初始化会读取我们配置的proguard-rule.txt和各种输入以及依赖的库,输入的被ClassPool统一管理,我们的rule.txt配置了keep的条件,ProGuard

1.5K60

Android 代码混淆规则

ProGuard是一个免费的Java文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的,字段,方法和属性。它可以优化字节码,并删除未使用的指令。...原则上,代码混淆后越乱越无规律越好,但有些地方我们是要避免混淆的,否则程序运行就会出错。...需要注意的是,这一流程不受shrinkResources属性控制,也无法被禁止, gradle 必然会做这项工作,因为假如不同项目中存在相同名称的资源将导致错误。...:是否混淆非公共的库的的成员 -dontpreverify:混淆是否做预校验(Android不需要预校验,去掉可以加快混淆速度) -verbose:混淆是否记录日志(混淆后会生成映射文件) -obfuscationdictionary...例如,如下代码会导致所有以“img_”开头的资源都被标记为已使用。

2.4K10

微信Android增量Proguard方案

大致构建流程如下: 图1  上图可以看出每个Plugin都有可能并发Compile,执行到Boot Plugin则需要串行Compile,最终经过Proguard、Dex等构建流程输出Apk, 而每个任务都会有相应的...】; 代码膨胀; optimizationpasses次数; Proguard优化项选取; 考虑的优化方案: 一个最简单的优化方案就是通过减少Proguard Optimize 次数来改善耗时,但是会对...的Reference不完备,就很容易出现Warning导致Proguard失效,即便Proguard成功,也未必跟上次构建结果保持一致; 采用R8,但R8 的耗时优化也达不到我们预期目标,它不允许您停用或启用离散优化...,见图22,当class A中的funA方法体有修改,则标记为CHANGE状态,此时A$2将必须copy到class a中,同时A$2需要remapping为A$2, 而不是A$1;  图23 匿名...】,导致无法通过mapping进行找回,这里我们修改Proguard源码,保留Shrink前后的mapping信息即可。

2.2K20

一文了解安卓APP逆向分析与保护机制

ProGuard就是一个混淆代码的开源项目,能够对字节码进行混淆、缩减体积、优化等处理。 Proguard处理流程图如下所示,包含压缩、优化、混淆、预检四个主要环节: ?...在分享中,钟亚平展示了利用Proguard,对Dex2jar进行反编译处理后的Apk效果示例: ? Proguard处理后 ?...三、拆分Dex加固 随着业务规模发展到一定程度,不断地加入新功能、添加新的库,代码在急剧膨胀的同时,相应的apk包的大小也急剧增加,那么简单的整体加固方案就不能很好地满足安全需求,在整体加固方案之外又出现了拆分加固的技术方案...但是如上所示,dex文件在加固,针对中间缺失的一部分数据会以解密后的数据来替换,有的时候这种拆分替换也会导致数据不准确。那么到底应该拆分什么样的数据呢?就需要了解一下dex文件的数据结构。...但在实际情况中,每次加固的映射关系都是随机变化的,如下所示,这种情况下就无法直接建立映射关系。 ? 不依赖于操作码的映射关系只与虚拟机结构有关,所以需要根据偏移关系建立映射关系,从而进行逆向分析。

1.6K30

Eclipse与Android源码中ProGuard工具的使用

ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的、字段和函数等,达到压缩、优化和混淆代码的功能。...但是有一点需要注意,仅在程序处于Release模式ProGuard才有效,反之在Debug模式是不能通过ProGuard来混淆代码的。...(有些模块没有这两句句,就自己手动加上) 反之,如果用户已经在alps/build/core/package.mk打开了全工程混淆编译的控制点后,又在针对某个模块不想混淆编译怎么办?...此时就需要我们配置混淆的个性化文件proguard-project.txt(eclipse环境中)或者proguard.flags(android源码环境),在其中去配置不需要混淆的、方法和变量等。...,所有中部分以设定了固定参数格式的构造函数,枚举等等,用来防止外部调用出错,大家可以借鉴下,以后来配置自己的文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1.3K90

一篇文章带你领略Android混淆的魅力

如: -keep class twitter4j.** { *; } -dontwarn twitter4j.** 其他的命令用法可参考 Android 系统提供的默认混淆规则: #混淆不生成大小写混合的名...其实,我们在使用代码混淆ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译出错,我们应该通过 keep 命令保留一些元素不被混淆。...原因在于: 四大组件使用前都需要在 AndroidManifest.xml 文件中进行注册声明,然而混淆处理之后,四大组件的名就会被篡改,实际使用的与 manifest 中注册的并不匹配,故而出错...其他应用程序访问组件可能会用到的包名加名,如果经过混淆,可能会无法找到对应组件或者产生异常。...创建发布构建都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本都必须小心地保存一个副本。

93620

Android开发:请你吃一顿史上最全的Android混淆大餐

如: -keep class twitter4j.** { *; } -dontwarn twitter4j.** 其他的命令用法可参考 Android 系统提供的默认混淆规则: #混淆不生成大小写混合的名...其实,我们在使用代码混淆ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译出错,我们应该通过 keep 命令保留一些元素不被混淆。...原因在于: 四大组件使用前都需要在 AndroidManifest.xml 文件中进行注册声明,然而混淆处理之后,四大组件的名就会被篡改,实际使用的与 manifest 中注册的并不匹配,故而出错...其他应用程序访问组件可能会用到的包名加名,如果经过混淆,可能会无法找到对应组件或者产生异常。...创建发布构建都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本都必须小心地保存一个副本。

4.1K30

Android混淆你了解多少?

如: 其他的命令用法可参考 Android 系统提供的默认混淆规则: #混淆不生成大小写混合的名 -dontusemixedcaseclassnames #不跳过非公共的库的 -dontskipnonpubliclibraryclasses...其实,我们在使用代码混淆ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译出错,我们应该通过 keep 命令保留一些元素不被混淆。...原因在于: 四大组件使用前都需要在 AndroidManifest.xml 文件中进行注册声明,然而混淆处理之后,四大组件的名就会被篡改,实际使用的与 manifest 中注册的并不匹配,故而出错...其他应用程序访问组件可能会用到的包名加名,如果经过混淆,可能会无法找到对应组件或者产生异常。...创建发布构建都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本都必须小心地保存一个副本。

1.8K00
领券