安全编程之Android APK打包代码混淆(代码实例)

   本篇文章给大家带来的内容是关于安全编程之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 ;}#表示不混淆任何一个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 ;}#保持自定义控件类不被混淆-keepclasseswithmembers class * {    public (android.content.Context, android.util.AttributeSet);}#保持自定义控件类不被混淆-keepclasseswithmembers class * {    public (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打包代码混淆(代码实例)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1547200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 18:58:00
下一篇 2025年12月21日 18:58:27

相关推荐

  • 用html5绘制折线图的实例代码

    这篇文章主要介绍了关于用html5绘制折线图的实例代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 XML/HTML Code复制内容到剪贴板 (function (){ window.addEventListener(“load”, function(){ var data = …

    2025年12月21日
    000
  • 关于HTML中的代码注释

    本文主要为大家分享一篇关于HTML中的代码注释的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。 html注释 在HTML代码中,标签之间的文本是文档的注释,注释的内容不会被显示在浏览器页面上。只有在文本编辑器中,或浏览器的“查看源代码”选项打开文档时,才能看到注释。 HTML…

    好文分享 2025年12月21日
    000
  • dreamweaver怎么快速对齐代码? dw对齐代码的设置方法_Dreamweaver教程_网页制作

    dreamweaver怎么快速对齐代码?dreamweaver中的代码很多,想要对齐代码,该怎么对齐呢?下面我们就来看看dw对齐代码的设置方法,对dreamweaver感兴趣的朋友可以参考下 dreamweaver代码很多,想让代码对齐,方便查看,也减少出错率,该怎么对齐代码呢?下面我们就来看看详细…

    2025年12月21日 好文分享
    000
  • Dreamweaver怎么使用标签及代码设计表格?_Dreamweaver教程_网页制作

    dreamweaver怎么使用标签及代码设计表格?dreamweaver中可以直接绘制表格,也可以通过标签和代码来制作表格,下面我们就来看看详细的教程,对dreamweaver感兴趣的的朋友可以参考下 Dreamweaver中想要画表格,该怎么通过标签和代码来制作表格呢?下面我们就来看看详细的教程。…

    2025年12月21日 好文分享
    000
  • 用JS和html做一个简易画板代码

     今天教大家做一个小程序,利用css3和h5以及js做一个好玩的简易画板,有兴趣的朋友可以动手尝试一下,代码贴在下面。大家也可以发挥自己的创造力改动一些功能。 html:颜色版:笔触:css:*{ margin:0; padding:0;}body{ background:#000;}canvas{…

    好文分享 2025年12月21日
    000
  • css的网页边框代码

    css的网页边框主要是用border来做的,那么今天我们就来熟悉一下关于css边框的知识。希望对大家有所帮助 CSS 边框即CSS border是控制对象的边框边线宽度、颜色、虚线、实线等样式CSS属性。同时大家可以进入CSS手册查看border手册 DIV+CSS边框border知识教程篇 Htm…

    好文分享 2025年12月21日
    000
  • HTML下拉菜单代码

    福利来拉福利来拉,经典的html下拉菜单代码,直接拿去用即刻,不用谢,叫我雷锋,代码是符合web标准的css下拉导航菜单布局,兼容性这方面非常的不错,大家可以放心使用 Html源代码 下拉 下拉 产品一 产品一 产品一 产品一 产品一 下拉 入门一 入门二 入门二 入门二入门二 入门二入门二入门二 …

    好文分享 2025年12月21日
    000
  • html导航条制作的图文代码分享

    在我们的日常web开发中,机会所有的网页他都有一个导航条,不仅仅是为了网页美观,更多的是给用户的一种体验,那么如何设置导航条呢?今天就大家详细介绍下html制作通用的导航条! 第一步:先创建一个盒子,定义类为 nav,width 1000,height 40px,防京东的导航,与浏览器顶部100px…

    2025年12月21日 好文分享
    000
  • html实现个人简历的实例代码分享

    html实现个人简历的实例代码分享 孙海洋个人简历姓名:孙海洋性别:男@@##@@ 出生年月:1992.4.6民族:汉学历:大专专业:数控车工籍贯:河南原阳联系电话:13602664383毕业学校:河南经济贸易高级技工学校住址:下油松新村 电子邮箱:hiyangson@163.com教育历程2007…

    好文分享 2025年12月21日
    000
  • html插入图片的示例代码详解(图)

    网页图片的基本格式:     HTML的相关标准中并没有规定图片的格式,原则上来说是任意的。但是目前市场上的主流浏览器对网页图片的格式有所要求,通常情况下是:JPEG(联合图像专家组)和GIF(图像交换格式)两种格式的图片;至于两种图片的一些特点和各自的优缺点,可通过百度自行搜索。 插入图片:   …

    2025年12月21日 好文分享
    000
  • html中关于列表的示例代码详解(图)

    html中的列表 HTML中列表中共有三种:有序列表、无序列表和定义列表。 1、有序列表是一列使用数字进行标记的项目,它使用 包含于标签(ordered lists)内; <!–Code highlighting produced by Actipro CodeHighlighter (fr…

    2025年12月21日 好文分享
    000
  • React密码生成器进阶:精确控制长度与实现动态强度反馈

    本教程将指导您如何使用React构建一个功能完善的密码生成器。我们将重点解决密码长度不符合预期的问题,通过优化字符选择逻辑和循环机制确保生成密码的精确长度。此外,还将介绍如何利用`useEffect`钩子实现密码强度实时动态更新,提升用户体验,并提供代码示例与最佳实践。 引言:构建React密码生成…

    2025年12月21日
    000
  • JS注解怎么标注日志记录_ 日志输出相关函数的JS注解书写方法

    答案:通过JSDoc为JavaScript函数添加注解可明确标识日志记录行为,如用@param描述参数、@returns声明返回值,并可通过自定义标签@logFunction增强语义,结合TypeScript还能提升类型安全,从而提高代码可读性与维护性。 在JavaScript中,并没有像Java那…

    2025年12月21日
    000
  • 根据配置动态构建数组:JavaScript条件筛选实践

    本教程详细阐述了如何在javascript中根据外部配置动态筛选并构建数组。通过遍历配置对象并结合条件判断,我们可以轻松地将符合特定条件的元素(例如,配置中设置为true的项)收集到一个新的数组中。这种方法在界面渲染、功能开关管理或数据处理等场景中非常实用,能够帮助开发者创建更灵活和响应式的应用程序…

    2025年12月21日
    000
  • React组件命名与文件命名规范深度解析

    在react开发中,自定义组件名称必须以大写字母开头,这是react区分组件与原生html元素的强制性规则。而组件对应的文件命名则没有严格规定,更多是遵循社区约定和团队规范,如pascalcase,以提高代码可读性和项目结构清晰度,避免潜在的跨平台引用问题。 在React应用开发中,关于组件的命名规…

    2025年12月21日
    000
  • 解决React useEffect中Fetch请求不执行及错误处理的最佳实践

    本教程深入探讨了在react `useeffect`钩子中执行`fetch`请求时可能遇到的问题,特别是关于请求看似未执行或错误处理不当的情况。文章将介绍如何通过构建一个健壮的`fetcher`工具函数来统一api调用和错误处理逻辑,从而提高代码的可读性、可维护性及调试效率,确保异步数据请求的稳定性…

    2025年12月21日
    000
  • 前端框架(React/Vue/Angular)中的JavaScript最佳实践

    模块化代码提升可维护性,2. 状态与副作用需清晰管理,3. 避免内联函数防止重渲染,4. 使用TypeScript和工具增强稳定性,遵循这些实践可写出高效、清晰的前端代码。 在使用前端框架如 React、Vue 或 Angular 时,JavaScript 的编写方式直接影响应用的可维护性、性能和团…

    2025年12月20日
    000
  • 深入理解CSS white-space属性与DOM元素布局

    本文旨在探讨在Web开发中,特别是在使用DOM操作动态生成元素时,因CSS white-space属性不当配置而导致的意外布局问题。我们将分析 white-space: break-spaces 如何影响HTML中静态定义的元素与JavaScript动态创建的元素之间的差异,并提供专业的解决方案及最…

    2025年12月20日
    000
  • 理解 TypeScript 类型与运行时值的边界:如何获取声明类型的字面量值

    TypeScript 的类型系统主要用于编译时静态检查,提升代码安全性,但类型本身在运行时并不可用。本文将解释 TypeScript 类型与 JavaScript 运行时值的根本区别,并提供通过常量、对象属性或枚举等运行时构造来存储和访问与类型对应的字面量值的实践方法,帮助开发者正确处理类型与值的关…

    2025年12月20日
    000
  • 如何实现JavaScript中的数组扁平化?

    JavaScript数组扁平化是将多层嵌套数组转为单层的过程,核心方法包括:1. 使用flat()按指定深度或Infinity完全扁平;2. 递归reduce实现函数式优雅处理;3. 迭代栈法避免深递归风险;4. 各方法均需正确识别非数组元素;5. 性能优化首选原生flat(),避免深层递归与频繁数…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信