android 哪些代码不用混淆,AndroidStudio中代码混淆以及打包操作-程序员宅基地

技术标签: android 哪些代码不用混淆  

摸索了两天,大概了解了在AndroidStudio中代码混淆和打包发布的过程,在此记录下。

代码混淆:

关于代码混淆的作用,就不多解释了,整个过程大致如下:

在app下的build.gradle文件中添加如下代码(minifyEnabled 表示是否混淆,默认是false,这里要记得设置成true):

c887f0936b012405016a6543f52ce7b5.png

其中proguard-android.txt文件是本地sdk/tools/proguard文件夹下的默认文件;prguard-rules.pro文件就是用来编写混淆代码的;

接下来就是在prguard-rules.pro文件中编写混淆代码:

关于其中代码的理解,可以参考这篇文章:代码混淆详解

编写完混淆代码,混淆也就算完成了,接下来就是打包了,但是,混淆的时候可能会遇到各种问题,主要是混淆代码,因为涉及到有的类不需要混淆,混淆了就会报错运行不了,所以在编写混淆代码的时候一定要小心,其实一般注意这几点就好了:

不需要导入第三方类库的代码,如上图注释的部分:-libraryjars libs/BaiduLBS_Android.jar等,按照网上说的,需要在混淆文件中导入第三方类库,防止混淆时读取包内容出错,但是如果那样做的话,会报如下错误:

4a8c96171ba3d23000bdaffce4d42b57.png

是的,他说这个包被指定了两次

原因是,在build.gradle文件中已经指定了第三方类库,这里再次指定,就会重复,所以,在此应该不需要导第三方包的代码

过滤掉第三方包,也就是不需要混淆第三方包,比如常见的 android-support-v4.jar:

-ignorewarnings

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }

-keep interface android.support.v4.app.** { *; }

-keep public class * extends android.support.v4.**

-keep public class * extends android.app.Fragment

下面是一个项目中我过滤掉的第三方包:

-keep class org.apache.**{*;}//过滤commons-httpclient-3.1.jar-keep class com.fasterxml.jackson.**{*;}//过滤jackson-core-2.1.4.jar等-keep class com.lidroid.xutils.**{*;}//过滤xUtils-2.6.14.jar--keep class com.baidu.** {*;}//过滤BaiduLBS_Android.jar

通常关于第三方包的混淆代码,一般在其github主页上或者simple中会有提示,比如 xUtils的混淆就建议不要混淆Annotation,即:`-keep class * extends java.lang.annotation.Annotation{*;}

还有百度地图,在其官方文档中有说明,需要如下混淆代码:

-dontwarn com.baidu.**-keep class com.baidu.**{*;}-keep class vi.com.**{*;}

接下来需要注意的就是一些固定格式的代码了,比如常见的Activity等不要混淆,Bean不要混淆等,看代码:

-keep public class * extends android.app.Activity

-keep public class * extends android.app.Application

-keep public class * extends android.app.Fragment

-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

这里的内容大致就是对一些Android组件保持原样,不进行混淆

总结一下混淆

在prguard-rules.pro文件中写的,其实就是混淆规则,规定哪些东西不需要混淆。自己编写的代码中大致就是一些重要的类需要混淆,而混淆的本质就是精简类名,用简单的a,b,c等单词来代替之前写的如DataUtil等易懂的类名。

所以,理解了这点,也就好理解这个混淆文件该怎么写了,大致思路就是:不混淆第三方库,不混淆系统组件,一般也可以不混淆Bean等模型类,因为这些对别人都是没用的,毕竟都是开源的。。。

下面是整个混淆文件的代码:

# Add project specific ProGuard rules here.

# By default, the flags in this file are appended to flags specified

# in C:\Users\sdt1\AppData\Local\Android\sdk/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 *;

#}

#-----------------混淆配置设定------------------------------------------------------------------------

-optimizationpasses 5 #指定代码压缩级别-dontusemixedcaseclassnames #混淆时不会产生形形色色的类名-dontskipnonpubliclibraryclasses #指定不忽略非公共类库-dontpreverify #不预校验,如果需要预校验,是-dontoptimize-ignorewarnings #屏蔽警告-verbose #混淆时记录日志-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #优化

#-----------------导入第三方包,但是在当前版本中使用会报 input jar file is specified twice 错误,所以注释掉

#-libraryjars libs/android.support.v4.jar

#-libraryjars libs/BaiduLBS_Android.jar

#-libraryjars libs/commons-httpclient-3.1.jar

#-libraryjars libs/jackson-annotations-2.1.4.jar

#-libraryjars libs/jackson-core-2.1.4.jar

#-libraryjars libs/jackson-databind-2.1.4.jar

#-libraryjars libs/xUtils-2.6.14.jar

#-----------------不需要混淆第三方类库------------------------------------------------------------------

-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

-keep class org.apache.**{*;} #过滤commons-httpclient-3.1.jar

-keep class com.fasterxml.jackson.**{*;} #过滤jackson-core-2.1.4.jar等

-dontwarn com.lidroid.xutils.** #去掉警告-keep class com.lidroid.xutils.**{*;} #过滤xUtils-2.6.14.jar-keep class * extends java.lang.annotation.Annotation{*;} #这是xUtils文档中提到的过滤掉注解

-dontwarn com.baidu.** #去掉警告-dontwarn com.baidu.mapapi.**-keep class com.baidu.** {*;} #过滤BaiduLBS_Android.jar-keep class vi.com.gdi.bgl.android.**{*;}-keep class com.baidu.platform.**{*;}-keep class com.baidu.location.**{*;}-keep class com.baidu.vi.**{*;}

#-----------------不需要混淆系统组件等-------------------------------------------------------------------

-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.preference.Preference-keep public class com.android.vending.licensing.ILicensingService

-keep class com.classtc.test.entity.**{*;} #过滤掉自己编写的实体类

#----------------保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在------------------------------------

-keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet, int);

}

打包发布

混淆代码编写完成,就是打包发布了,打包的时候需要注意,如果混淆代码编写有疏漏,编译打包可能会出错,如上面的那个报错一样,就是在混淆的时候重复指定了第三方包,导致编译打包出错。

下面是打包的具体过程:

如图,在AndroidStudio中找到Build–>Generate Signed APK…

b40d3437a9c6b32afc47c03f99446923.png

在出现的窗口中选择Create new (如果之前创建过,可以直接选择,然后在下面输入密码即可):

1875aee96563e2b6267e45a639b75ad2.png

接下来编写密钥信息窗口:

065b6a0bf4537f36b0caa76296235f4f.png

填写完密钥信息后回到之前的窗户,点击Next,然后点击Finish就完成了,然后等待编译完成,在文件夹下会多一个app-release.apk文件,这个就是正式版的安装包

到此,打包完成,当然,如果需要发布到各大软件市场,可能还需要渠道打包,这个就等以后做过了再回来总结

推荐文章:使用Gradle管理你的AndroidStudio工程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_32098191/article/details/117483847

智能推荐

2023.8DataWhale_cv夏令营第三期笔记_逻辑回归需要训练很多轮么-程序员宅基地

文章浏览阅读257次。使用官方提供的脑PET数据集,构建逻辑回归模型来进行脑PET图像的疾病预测,数据集被分为两类,分别为轻度认知障碍(MCI)患者的脑部影像数据和健康人(NC)的脑部影像数据,图像数据格式为nii,因此本赛题可抽象为一个二分类问题。nii是一种常用的医学图像数据格式,主要用于存储和交换神经影像数据。以下是一些主要特点:1.主要用于存储3D(三维)医学图像数据,如MRI(磁共振成像)和CT(计算机断层扫描)图像。2.支持多种数据类型,使得其可以支持不同类型的数据处理和分析。_逻辑回归需要训练很多轮么

通用指南-营销和设计中的增强现实(AR)-程序员宅基地

文章浏览阅读1.2k次,点赞31次,收藏26次。增强现实通常被视为一个利基领域。然而,在过去的两年里,它已经到了一个成熟的阶段,应该在一般的营销堆栈中进行考虑。正如我们所看到的,这个市场是巨大的,而且随着主要参与者向这项技术投入大量投资,它只会继续增长。从苹果到Meta,大公司都相信身临其境的未来,而想要获得成功的营销人员和创意人员也加入了进来。本文第三章,最佳设计实践除了深入讨论AR设计的原则外,还全面推荐了AI设计工具。旨在帮助读者的AI作品脱颖而出。

linux c 网络编程_usage: ./tcp_client hostname-程序员宅基地

文章浏览阅读473次。OSI七层网络模型由下至上为1至7层,分别为:物理层(Physical layer),数据链路层(Data link layer),网络层(Network layer),传输层(Transport layer),会话层(Session layer),表示层(Presentation layer),应用层(Application layer)。1.1 应用层,很简单,就是应用程序。这一层负责_usage: ./tcp_client hostname

Nexus3配置yum代理 pypi代理和npm代理(三合一)_maximum component age-程序员宅基地

文章浏览阅读2.8k次。环境准备安装 maven 安装 java 环境[root@cicd-nexus ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz[root@cicd-nexus ~]# tar xf apache-maven-3.6.3-bin.tar.gz -C /usr/local/[root@cicd-nexus ~]# tar xf _maximum component age

使用js-xlsx handsontable 分批次导入Excel数据(兼容ie9)_js 导excel 分批写入-程序员宅基地

文章浏览阅读1.6k次。使用js-xlsx handsontable 可以把本地excel 解析到网页上,然后分批次传入后台。在chrome 下 可以参考 https://github.com/SheetJS/js-xlsx 【Browser file upload form element】但需要使用FileReader api 这个只有ie10 才开始支持。兼容ie9 ,ie9需要通过flash 来支持..._js 导excel 分批写入

wxWidgets 自绘按钮(图片+文字)_wxwidgets 中文按钮-程序员宅基地

文章浏览阅读2.5k次。在wxWidgets中,想要通过其本身的控件来实现图片+文件的按钮,貌似不太容易做到。但是可以通过重载wxControl来自绘图片+文件按钮。下面给出的是已经封装好的按钮类:wxBitmapButtonEx.h#ifndef _BITMAP_BUTTON_EX_H#define _BITMAP_BUTTON_EX_H#include "wx/wx.h"enum eBitm_wxwidgets 中文按钮

随便推点

invalidate()和postInvalidate()的区别_postinvalidate和invalidate的区别-程序员宅基地

文章浏览阅读847次。invalidate()与postInvalidate()都用于刷新View,主要区别是invalidate()在主线程中调用,若在子线程中使用需要配合handler;而postInvalidate()可在子线程中直接调用。postInvalidate它是向主线程发送个Message,然后handleMessage时,调用了invalidate()函数。(系统帮我们 写好了 Handle..._postinvalidate和invalidate的区别

计算机表格 求差,Excel表格中求差函数公式怎么用-程序员宅基地

文章浏览阅读9.1k次。excel数据进行分类汇总的步骤在做分类汇总前,我们需要对数据先进行排序,否则分类汇总无法进行。得到排序后的表格。点击上方工具栏中的“数据”→“分类汇总”。在弹出的对话框中选择“分类字段”→“汇总方式”→“决定汇总项”。点击确定出现数据汇总结果。Excel表格中求差函数公式使用的方法第一步:打开Excel表格,单击第一排,第三个“单元格”,也就是C1,在C1中输入“=A1-B1”;第二步:这个公式..._表格求差公式

Linux下OpenCV的安装与测试成功教程(解决E: 无法定位软件包 libjasper-dev、无法找到directory `opencv.pc‘、fatal error:“highgui.h“)_无法定位软件包 libgazebo-dev-程序员宅基地

文章浏览阅读1.5w次,点赞49次,收藏169次。前言好激动,断断续续装了两三天才装上,踩了好多坑。这里把成功安装的步骤详细写下来,如果有小伙伴需要,可以尝试一下,但我不能保证你也可以装好。首先说一下我的各个版本(不谈版本的安装教程都是耍流氓!)是用虚拟机软件:VirtualBOX6.1.30系统版本:ubuntu-20.04.3-desktop-amd64(最小安装模式,中文)OpenCV版本:4.5.5安装时间:2022.2.11下面是步骤1、进入OpenCV的官方下载地址Releases - OpenCV,下载So_无法定位软件包 libgazebo-dev

红帽子粉帽子绿帽子II(递归,递推)-程序员宅基地

文章浏览阅读320次,点赞6次,收藏10次。/是上一个的进化版,相邻的可以一样但是不能都是绿色,注意条件;~~~//仅当笔者个人备忘录使用。

解决Install Intel x86 Emulator Accelerator (HAXM installer) (revision: 7.6.5)“ failed问题-程序员宅基地

文章浏览阅读6.7k次。由于Install Intel x86 Emulator Accelerator (HAXM installer) (revision: 7.6.5)安装失败,导致我的安卓虚拟机无法启动。解决办法有一下几种:1.开机进入BIOS打开Virtual虚拟化功能,然后进入Androidstudio 的SDK manager里面安装HAXM2.关闭系统中的Hyper-v,进入控制面板的程序和功能,将Hyper-v去选即可。3.如果前面的方法都不行,那么建议你重新下载AndroidStudio最新版进行安装_intel x86 emulator

PowerBuilder的语言基础-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏15次。 每一种语言都有一组基本的语法约定,POWERBUILDER也不例外。 (1)断行、续行与多条语句 通常情况下,powerbuilder的一条语句是写到一行上的,该条语句在书写完毕之后,按键转到下一行,开始写下一句的内容。也就是说,在PowerBuilder中,使用键作为一行的结束。在PowerBuilder语句比较长的情况下,为了方便阅读,可以使用续行符号把一条语句写到几_powerbuilder