Android_多渠道打包_混淆

  • 1、多渠道打包配置
  • 2、混淆

1、多渠道打包配置

android studio version 4.2.2
sdk version 30

  • 作用:

    1、统计用户安装APP来源

    2、批量修改生成的apk文件名、包名等

  • 签名:

    1、生成jks(java key store):Build->Generate Signed Bundle

    2、打包对应apk版本:AS编译器左侧,Build Variants中选择

    3、查看MD5和SHA1:windows环境:cmd进入jdk的bin目录,执行keytool.exe -list -keystore D:\test.jks

  • 具体配置:app目录下build.gradle文件

 // 统一维度flavorDimensions "versionCode"// 1、配置多渠道productFlavors {xiaomi {applicationId = "com.yong.xiaomi"//不同渠道配置不同参数buildConfigField "int", "TEST_VALUE", "1"buildConfigField "String", "TEST_NAME", "\"xiaomi\""}huawei {applicationId = "com.yong.huawei"//不同渠道配置不同参数buildConfigField "int", "TEST_VALUE", "2"buildConfigField "String", "TEST_NAME", "\"huawei\""}//遍历productFlavors多渠道,设置渠道号(xiaomi 、huawei)productFlavors.all {flavor -> flavor.manifestPlaceholders.put("CHANNEL", name)}}// 2、配置输出路径,项目名+编译类型+版本号+当前时间applicationVariants.all { variant ->def name = ((project.name != "app") ? project.name : rootProject.name.replace(" ", "")) +"_" + variant.flavorName +"_" + variant.buildType.name +"_" + variant.versionName +"_" + new Date().format('yyyyMMddhhmm') + ".apk"//相当于路径 app/apk/def path = "../../../../../apk/"variant.outputs.each { output ->def outputFile = output.outputFileif (outputFile != null && outputFile.name.endsWith('.apk')) {//指定路径输出output.outputFileName = new File(path, name)}}// 在打包完成后还可以做一些别的操作,可以复制到指定目录,或者移动文件到指定目录/*variant.assemble.doLast {//File out = new File("${project.rootDir}/apk")variant.outputs.forEach { file ->//1、复制apk到指定文件夹//copy {//  from file.outputFile//  into out//}//2、把文件移动到指定文件夹ant.move file: file.outputFile,todir: "${project.rootDir}/apk"}}*/}// 3、多渠道签名的配置signingConfigs {xiaomi {// keystore需要自己生成storeFile file("../keystore/xiaomi.jks")storePassword 'xiaomi'keyAlias 'xiaomi'keyPassword 'xiaomi'v1SigningEnabled true //针对Jar包v2SigningEnabled true //针对Apk包}huawei {storeFile file("../keystore/huawei.jks")storePassword 'huawei'keyAlias 'huawei'keyPassword 'huawei'v1SigningEnabled truev2SigningEnabled true}}// 4、编译类型buildTypes {debug {productFlavors.xiaomi.signingConfig signingConfigs.xiaomiproductFlavors.huawei.signingConfig signingConfigs.huawei}release {minifyEnabled true // 开启混淆zipAlignEnabled true // 优化apk文件shrinkResources true // 去除无用资源proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'// 指定混淆规则文件productFlavors.xiaomi.signingConfig signingConfigs.xiaomiproductFlavors.huawei.signingConfig signingConfigs.huawei}}// 5、不同渠道不同资源文件配置sourceSets {xiaomi.res.srcDirs 'src/main/res-xiaomi'huawei.res.srcDirs 'src/main/res-huawei'}

2、混淆

代码混淆(Obfuscated code)是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。————维基百科

  • 配置:app目录下proguard-rules.pro文件,基本包含大多数场景
-ignorewarnings                     # 忽略警告,避免打包时某些警告出现
-optimizationpasses 5               # 指定代码的压缩级别
-dontusemixedcaseclassnames         # 是否使用大小写混合
-dontskipnonpubliclibraryclasses    # 是否混淆第三方jar
-dontpreverify                      # 混淆时是否做预校验
-verbose                            # 混淆时是否记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*    # 混淆时所采用的算法# 保留了继承自Activity、Application这些类的子类
# 因为这些子类有可能被外部调用
# 比如第一行就保证了所有Activity的子类不要被混淆
-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.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View
-keep public class * extends android.support.v4.**# 保留Activity中的方法参数是view的方法,
# 从而我们在layout里面编写onClick就不会影响
-keepclassmembers class * extends android.app.Activity {
public void * (android.view.View);
}# 枚举类不能被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}# 保留自定义控件(继承自View)不能被混淆
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(***);
*** get* ();
}# 保留Parcelable序列化的类不能被混淆
-keep class * implements android.os.Parcelable{
public static final android.os.Parcelable$Creator *;
}# 保留Serializable 序列化的类不被混淆
-keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;private static final java.io.ObjectStreamField[] serialPersistentFields;!static !transient <fields>;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);java.lang.Object writeReplace();java.lang.Object readResolve();
}# 对R文件下的所有类及其方法,都不能被混淆
-keep public class com.foresee.R$*{
public static final int *;
}# 对于带有回调函数onXXEvent的,不能混淆
-keepclassmembers class * {
void *(**On*Event);
}#实体类不混淆
-keep class com.yong.multichannel.** {*;}#自定义控件不混淆
-keep class com.yong.multichannel.** {*;}

Android_多渠道打包_混淆相关推荐

  1. 友盟多渠道打包+混淆+腾讯云直播的推/拉流

    一. 友盟多渠道打包 各种下载应用的软件网址,叫渠道分发商,如腾讯应用宝,百度,Google Play,多渠道打包通过了解下载量,有针对性的打广告 多渠道打包意义: 可以用这个APK,放上一段业务逻辑 ...

  2. android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)

    多渠道打包和资源混淆的作用这里我就不再阐述了.网上有很多. 本篇博客我们来介绍一下如何实现多渠道打包之前先进行资源混淆,这样一来我们打出来的包都是已经进行过资源混淆的了. 如果你还有其他的需求,也可以 ...

  3. Android Studio多渠道打包和代码混淆教程

    什么是Gradle Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言.Androi ...

  4. 16.用360加固保完成混淆、多渠道打包

    转载请注明出处 http://blog.csdn.net/qq_31715429/article/details/50977870 本文出自:猴菇先生的博客 百度搜索360加固保 应用加固; 上传应用 ...

  5. android多渠道打包(动态改变地址打包,只需改下版本号)

    多渠道打包本来不想写的,因为比较麻烦,所以没打算写.只是前段时间因为电脑蓝屏重装了系统,导致不能打包了,所以又百度了半天,今天就写下来做个笔记. 废话不多说,进入主题. 配置多渠道打包就要使用友盟统计 ...

  6. Android 多渠道打包实操(更改包名、图标、主题资源 、替换常量、第三方SDK Appkey配置)

    最近在做一个通用版的会员系统,给予不同的公司使用,先前是通过切换版本分支来管理的,后面发现实在是繁琐和痛苦管理,仅仅是需要更改不同的常量.主题资源.包名.图标等等,主体代码逻辑功能基本不变. 先前了解 ...

  7. 美团多渠道打包方案详解,速度快到白驹过隙

    美团多渠道打包方案详解,速度快到白驹过隙 Andorid渠道市场有多分散呢?分散到比Android碎片化还严重,你还在为多渠道打包而头疼吗?美团提供了速度快到白驹过隙的多渠道打包方案.说的有点夸张,对 ...

  8. android 自定义apk名,Android Studio多渠道打包、自定义打包APK名称

    现在为了推广产品,会在多个渠道应用市场发布应用,为了统计不同渠道的数据,需要在应用中表明渠道,如果一个一个去修改打包效率会很低.AS为我们提供了简便的方法,可以多渠道打包,一次打包所有的渠道包. 1. ...

  9. 自动化打包资源混淆集成python实践----资源混淆

    前面自动化打包资源混淆集成python实践----打包一文讲述了四种打包方案,以及美团打包方案.apk注释添加渠道号方案的实现.这里讲集成资源混淆. 1.资源混淆带来的好处: 1)对资源文件起一定的保 ...

最新文章

  1. Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)
  2. Numpy中array和matrix转换
  3. Reverse Vowels of a String
  4. Android接入支付宝支付实现
  5. [AtCoder Regular Contest 123] 题解
  6. mysql如何给表字段加密_Mysql 字段加密
  7. 【Vue】—项目的目录结构介绍
  8. React文档(十九)不使用ES6
  9. Cookie介绍与操作
  10. 多元最大似然估计函数
  11. Clear Float
  12. rip和ospf vrrp vlan综合实验
  13. java反射——构造方法
  14. 高颜值:Redis官方可视化工具,功能强大!
  15. 联想新计算机开机黑屏,联想笔记本开机黑屏怎么办
  16. systrace如何使用
  17. Python之---【pandas】pd.concat(df)、df.append(df)
  18. VS2008简体中文版下载及安装破解
  19. linux搭建软路由,用 Alpine Linux 搭建软路由
  20. 【Netty官方文档翻译】引用计数对象(reference counted objects)

热门文章

  1. arduino定时器pdf_Arduino基础入门篇18—数字时钟
  2. 第七周:字符串 + 数组 + 指针
  3. MySQL命令行登录不上但是sqlyog能成功连接
  4. ubuntu系统下C语言编写简单程序
  5. 解决vue重复点击路由报错问题:Uncaught (in promise) NavigationDuplicated
  6. 性能测试:一种计算 TP90、TP95 和 TP99 等水位线的方法
  7. Educoder_Web_简历表页面的制作
  8. 技术集锦 | 大数据云原生技术实战及最佳实践系列
  9. 腾讯十大开源项目,最后一个太受欢迎了!
  10. 基于SqlServer环境下创建触发器、级联更新(删除、修改)