Adnroid studio生成混淆的jar包方法
阿新 • • 發佈:2019-01-26
Adnroid studio生成混淆的jar方法
1. 概述
以下為android studio 匯出jar包的流程
2.打包jar步驟
- 在專案中新建一個Module並選擇選擇Android Libraray
File-New-New Modele-Android Libraray - 需要生成jar的原始檔java都放在新建的Library中
- 配置Library build.gradle
- 配置混淆檔案
3. 詳細步驟
3.1 配置Library的build.gradle檔案
apply plugin: 'com.android.library' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') } //=======生成jar包指令碼 start============================================= def SDK_BASENAME = "httpUtil"; def SDK_VERSION = "_V1.0"; def sdkDestinationPath = "build";//生成jar存放目錄 //打包release目錄下的classes.jar(開啟混淆後這個jar就是混淆的原始碼)----注意由於as版本原因有的在default目錄 def releaseJar = file('build/intermediates/bundles/release/classes.jar') //打包debug目錄下的classes.jar def debugJar = file('build/intermediates/bundles/debug/classes.jar') //將libs目錄下的gson打入jar包 def thirdPartyJar = file('libs/gson-2.8.0.jar') //打包jar前先刪除原先的jar task deleteBuild(type: Delete) { delete sdkDestinationPath + SDK_BASENAME + SDK_VERSION + ".jar" } task makeJar(type: Jar) { from zipTree(releaseJar)//匯出混淆的jar //from zipTree(debugJar)//匯出未混淆的jar //from zipTree(thirdPartyJar)將第三方jar包打入jar包 //from fileTree(dir: 'src/main', includes: ['assets/**'])//將assets目錄打入jar包 exclude('**/BuildConfig.class')//排除不必要的class檔案 baseName = SDK_BASENAME + SDK_VERSION destinationDir = file(sdkDestinationPath) } makeJar.dependsOn(deleteBuild, build) //=======生成jar包指令碼 end============================================= //執行指令碼 //1.命令列方式:在Terminal輸入gradlew makeJar //2.圖形介面方式:Gradle :ModuleName Tasks other markJar
3.2 配置Library的混淆檔案
#============以下為自己新增的混淆規則====================== #-libraryjars 'C:\Program Files\Java\jre1.8.0_121\lib\rt.jar' #忽略警告 #-ignorewarnings #不要壓縮(這個必須,因為開啟混淆的時候 預設 會把沒有被呼叫的程式碼 全都排除掉) -dontshrink #避免混淆泛型 如果混淆報錯建議關掉 #-keepattributes Signature #============保持相應的類不被混淆=========================== #保持BuildConfig不被混淆(因為混淆之後就無法在匯出jar時排除該類) #同理 相應的TestActivity以及TestService也需要保持不被混淆 -keep class com.kok.http.BuildConfig{ public *; } #保持呼叫介面不被混淆 -keep class com.kok.http.core.HttpUtils{ public *; } -keep class com.kok.http.core.HttpErrorCode{ public *; } -keep class com.kok.http.callback.**{*;}
3.3 其他
android studio 使用命令打包 需配置Gradle環境變數
例如:
變數名:GRADLE_HOME
變數值:C:\Users\Administrator.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv\gradle-2.14.1
然後在Path中新增GRADLE_HOME