Android studio的使用 -- 代码混淆与打包

    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 压缩率

  dontusemixedcaseclassnames 混淆时不会产生形形色色的类名
  dontskipnonpubliclibraryclasses 指定不去忽略非公共的库类。
  dontpreverify 不预校验
  verbose
  optimizations!code/simplification/arithmetic,!field/*,!class/merging/* 优化
  keep public class * extendsandroid.app.Activity 不进行混淆保持原样

   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$* { *; }

   # # ############### volley混淆 ###############

   常用keep

  -keep public class * extendsandroid.app.Activity  【不进行混淆保持原样】
  -keep public class * extendsandroid.app.Application
  -keep public class * extendsandroid.app.Service
  -keep public class * extendsandroid.content.BroadcastReceiver
  -keep public class * extendsandroid.content.ContentProvider
  -keep public class * extendsandroid.app.backup.BackupAgentHelper
  -keep public class * extendsandroid.preference.Preference
  -keep public classcom.android.vending.licensing.ILicensingService
  -keep public abstract interfacecom.asqw.android.Listener{
  public protected ; 所有方法不进行混淆
  }
  -keep public classcom.asqw.android{
  public void Start(java.lang.String);  对该方法不进行混淆
  }
  -keepclasseswithmembernames class * {
  //保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
  native ;
  }
  -keepclasseswithmembers class * {
  //保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
  public (android.content.Context,android.util.AttributeSet);
  }
  -keepclasseswithmembers class *{
  public (android.content.Context,android.util.AttributeSet, int);
  }
  -keepclassmembers class * extendsandroid.app.Activity {
  //保护指定类的成员,如果此类受到保护他们会保护的更好
  public void*(android.view.View);
  }
  -keepclassmembers enum *{
  public static **[]values();
  public static **valueOf(java.lang.String);
  }
  -keep class * implementsandroid.os.Parcelable {
  //保护指定的类文件和类的成员
  public static finalandroid.os.Parcelable$Creator *;
 }
 //不混淆指定包下的类 
 -keep classcom.aspire.**
 以上就是混淆文件主要内容,下面到了打包环节,如何打包?
 右击项目 -->Android Tools -->Export Signed Application Package --选择你要打包的项目
-->next(下图所示)
 
 如果没有keystore,选择Create new keystore 创建一个就行
next 选择keystore中alias(别名) password(密码)
 
  next  生成APP名称及存放位置

 

  finish

  混淆打包签名 有效防止APP被反编译,都不想自己的成果被被人白白窃取吧。

 Android Studio:

 混淆文件配置在 app -->build.gradle文件中

打开之后

minifyEnabled false改为true 

proguard-rules.pro 混淆跟eclipse差不多 唯一不同的就是libraryjars将不再保持keep操作(用#注释掉就好),Android studio已做依赖处理,保持keep导致重复,出问题。

然后选择工程最上部菜单栏的Build -->Generate Signed APK

剩下的跟eclipse差不多。

所说内容很粗略,开发者可借助搜索引擎结合本篇理解混淆打包签名,多渠道打包就不在此细说。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值