日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android_多渠道打包_混淆

發布時間:2024/3/12 Android 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android_多渠道打包_混淆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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_多渠道打包_混淆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。