如何在Android中使用工作室进行打包

  介绍

今天就跟大家聊聊有关如何在Android中使用工作室进行打包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强> 1,工具栏构建→生成签名的APK . .

如何在Android中使用工作室进行打包

如何在Android中使用工作室进行打包

如何在Android中使用工作室进行打包

如何在Android中使用工作室进行打包

打包过程如上,结束了。

<强>二、混淆

做开发的都知道我们可以通过一些工具来反编译一个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;
  }
  }

如何在Android中使用工作室进行打包

首先是一些固定的

 -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中使用工作室进行打包