介绍
今天就跟大家聊聊有关如何在Android中使用工作室进行打包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强> 1,工具栏构建→生成签名的APK . .强>
打包过程如上,结束了。
<强>二、混淆强>
做开发的都知道我们可以通过一些工具来反编译一个Apk,得到其中的资源,意图好的也许就是为了参考你项目中优秀的代码。意图不好的也许会反编译Apk来找到你项目中的漏洞,对项目安全做出威胁。
所以现在我们在打包一个项目之前,都要对项目进行混淆处理,让Apk无法被轻易的反编译,提高产品的安全性。
混淆操作需要进行一些配置。
在应用目录下的构建。gradle文件中修改安卓{}区域内代码
//执行线头检查,有任何的错误或者警告提示,都会终止构建 lintOptions { abortOnError假 }
buildTypes { 调试{//显示日志 buildConfigField“boolean",“LOG_DEBUG",“true" versionNameSuffix“-debug" minifyEnabled假 zipAlignEnabled假 shrinkResources假 signingConfig signingConfigs.debug } 释放{//不显示日志 buildConfigField“boolean",“LOG_DEBUG",“false"//混淆 minifyEnabled真实//Zipalign优化 zipAlignEnabled真实//移除无用的资源文件 shrinkResources真实//前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile (& # 39; proguard-android.txt& # 39;), & # 39; proguard-rules.pro& # 39; } }
首先是一些固定的
-keepclassmembers类fqcn.of.javascript.interface.for.webview { 公共*; } #指定代码的压缩级别 -optimizationpasses 5 #包明不混合大小写 -dontusemixedcaseclassnames #不去忽略非公共的库类 -dontskipnonpubliclibraryclasses #优化不优化输入的类文件 -dontoptimize #预校验 -dontpreverify #混淆时是否记录日志 - verbose #混淆时所采用的算法 优化代码/简化运算,!/*,!类/合并/* #保护注解 -keepattributes *注释* #保持哪些类不被混淆 小* android.app.Fragment延伸公共类 小* android.app.Activity延伸公共类 小* android.app.Application延伸公共类 小* android.app.Service延伸公共类 小* android.content.BroadcastReceiver延伸公共类 小* android.content.ContentProvider延伸公共类 小* android.app.backup.BackupAgentHelper延伸公共类 小* android.preference.Preference延伸公共类 小公开课com.android.vending.licensing.ILicensingService #如果有引用v4包可以添加下面这行 小* android.support.v4.app.Fragment延伸公共类 #忽略警告 -ignorewarning # #记录生成的日志数据,gradle构建时在本项目根目录输出# # # apk包内所有类的内部结构 您混淆器/class_files.txt #未混淆的类和成员 -printseeds混淆器/seeds.txt #列出从apk中删除的代码 -printusage混淆器/unused.txt #混淆前后的映射 -printmapping混淆器/. txt # # # # # # # #记录生成的日志数据,gradle构建时在本项目根目录输出端# # # # # # #如果引用了v4或者v7包 -dontwarn android.support。* * # # # #混淆保护自己项目的部分代码以及引用的第三方jar包library-end # # # # #保持本地方法不被混淆 -keepclasseswithmembernames类* { 本机& lt; methods>; } #保持自定义控件类不被混淆 -keepclasseswithmembers类* { 公共& lt; init> (android.content。背景下,android.util.AttributeSet); } #保持自定义控件类不被混淆 *扩展android.app -keepclassmembers类。活动{ 公共void * (android.view.View); } 小* android.view延伸公共类。视图{ 公共& lt; init> (android.content.Context); 公共& lt; init> (android.content。背景下,android.util.AttributeSet); 公共& lt; init> (android.content。上下文,android.util。AttributeSet, int); 公共空集* (…); } #保持Parcelable不被混淆 *实现android.os小类。Parcelable { 公共静态最终android.os。Parcelable创造者*美元; } #保持序列化不被混淆 *实现java.io.Serializable -keepnames类 #保持序列化不被混淆并且enum类也不被混淆 -keepclassmembers java类*实现。可序列化的{ 静态最终serialVersionUID长; 私有静态最终io。ObjectStreamField [] serialPersistentFields; 静态!瞬态& lt; fields>; !私人& lt; fields>; !私人& lt; methods>; 私人空间writeObject (java.io.ObjectOutputStream); 私人空间readObject (java.io.ObjectInputStream); . lang。对象writeReplace (); . lang。对象readResolve (); } #保持枚举enum类不被混淆 -keepclassmembers enum * { 公共静态* *[]值(); 公共静态* *返回对象的值(以); } -keepclassmembers类* { 公共void * ButtonClicked (android.view.View); } #不混淆资源类 -keepclassmembers类* *。R $ * { 公共静态& lt; fields>; } #避免混淆泛型如果混淆报错建议关掉 # -keepattributes签名如何在Android中使用工作室进行打包