天天看點

Adnroid studio生成混淆的jar包方法Adnroid studio生成混淆的jar方法

Adnroid studio生成混淆的jar方法

1. 概述

以下為android studio 導出jar包的流程

2.打包jar步驟

  1. 在項目中建立一個Module并選擇選擇Android Libraray

    File-New-New Modele-Android Libraray

  2. 需要生成jar的源檔案java都放在建立的Library中
  3. 配置Library build.gradle
  4. 配置混淆檔案

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

4. 相關流程截圖

4.1 配置Gradle

Adnroid studio生成混淆的jar包方法Adnroid studio生成混淆的jar方法

4.2 配置混淆檔案

Adnroid studio生成混淆的jar包方法Adnroid studio生成混淆的jar方法

4.3 打包jar

Adnroid studio生成混淆的jar包方法Adnroid studio生成混淆的jar方法