Android studio在混淆打包方面与eclipse很相似,主要区别在原有libraryjars将不再保持keep操作,Android studio已做依赖处理,保持keep导致重复,出问题。
eclipse 混淆打包方式 与 Android studio混淆打包方式比较:
eclipse:先说混淆,建立工程后会生成project.properties 文件
打开project.properties会看到
这句是混淆的关键(混淆配置) -- 指向混淆文件的位置 (proguard.config= (混淆文件位置) )
做法1:“#”去掉,打开proguard-project.txt 在文件中进行混淆操作
做法2:proguard.config= proguard.cfg;如果没有proguard.cfg可以在项目下新建 proguard.cfg用notepad++打开;或者见txt混淆完后重命名为proguard.cfg。
混淆配置设置完后,怎么混淆呢?
混淆中的关键字:
keep 保留保持关键字,用于类或者类成员被保留作为入口不被混淆时采用。
dontwarn 避免引用出错时采用(程序中可能存在无关引用 或者引用错误,缺省处理)
keepclassmember 指定类成员被保留不被混淆
keepclasseswithmembers 指定的类和类成员被保留不被混淆
libraryjars 引用的jars,一般存放在libs下
ignorewarnings 忽略警告
optimizationpasses 5 压缩率
keepattributes 用到的反射类,保持keep。例如-keepattributes Signature 、-keepattributes *Annotation*、 -keepattributes *JavascriptInterface* 等
如果引用第三方 找到引用的包名 keep ,比如
# # ############### volley混淆 ###############
# # -------------------------------------------
keep class com.android.volley.** {*;}
keep class com.android.volley.toolbox.** {*;}
keep class com.android.volley.Response$* { *; }
keep class com.android.volley.Request$* { *; }
keep class com.android.volley.RequestQueue$* { *; }
keep class com.android.volley.toolbox.HurlStack$* { *; }
keep class com.android.volley.toolbox.ImageLoader$* { *; }
常用keep
//保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
//保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
//保护指定类的成员,如果此类受到保护他们会保护的更好
//保护指定的类文件和类的成员
以上就是混淆文件主要内容,下面到了打包环节,如何打包?
右击项目 -->Android Tools -->Export Signed Application Package --选择你要打包的项目
-->next(下图所示)
如果没有keystore,选择Create new keystore 创建一个就行
next 选择keystore中alias(别名) password(密码)
finish
混淆打包签名 有效防止APP被反编译,都不想自己的成果被被人白白窃取吧。
Android Studio:
混淆文件配置在 app -->build.gradle文件中
打开之后
minifyEnabled false改为true
proguard-rules.pro 混淆跟eclipse差不多 唯一不同的就是libraryjars将不再保持keep操作(用#注释掉就好),Android studio已做依赖处理,保持keep导致重复,出问题。
然后选择工程最上部菜单栏的Build -->Generate Signed APK
剩下的跟eclipse差不多。
所说内容很粗略,开发者可借助搜索引擎结合本篇理解混淆打包签名,多渠道打包就不在此细说。