Android Studio使用gradle匯出jar包並混淆程式碼程式碼記錄一
阿新 • • 發佈:2019-01-08
建立一個Android module 和一個AndroidLibrary module
在jardemo下的gradle檔案中編寫對應的導Jar包Task和混淆Task
1.導Jar包Task
task makeJar(type: Jar, dependsOn: ['compileReleaseJavaWithJavac']) {
appendix = 'demo'
baseName = 'AndroidJar'
version = '1.0.0'
classifier = 'release'
//字尾名
extension = 'jar'
//最終的 Jar 包名,如果沒設定,預設為 [baseName]-[appendix]-[version]-[classifier].[extension]
//archiveName = 'Demo.jar'
//需打包的資源所在的路徑集
def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"]
//初始化資源路徑集
from srcClassDir
//去除路徑集下部分的資源
exclude 'com/scott/jardemo/BuildConfig.class'
exclude '**/R.class'
exclude '**/R\$*.class'
//只匯入資源路徑集下的部分資源
include 'com/scott/jardemo/**/*.class'
}
在Teminal中cd jardemo 進入jardemo目錄下,敲命令 gradle makeJar 執行完畢就將Jar匯出來了,在build/lib 下
使用jd-gui.exe開啟如下
如果要在MANIFEST.MF中新增其他的資訊,下篇文章繼續說。
這裡簡單說下,type是Jar,這個就不用說了,dependsOn的意思是依賴於哪個任務,在執行這個任務之前會先執行依賴的任務
2.混淆jar包
task proguardJar(dependsOn: ['makeJar'], type: proguard.gradle.ProGuardTask) {
//Android 預設的 proguard 檔案
configuration android.getDefaultProguardFile('proguard-android.txt')
//manifest 註冊的元件對應的 proguard 檔案
configuration 'proguard-rules.pro'
String inJar = makeJar.archivePath.getAbsolutePath()
//輸入 jar
injars inJar
//輸出 jar
outjars inJar.substring(0, inJar.lastIndexOf(File.separator)) + "/proguard-${makeJar.archiveName}"
//設定不刪除未引用的資源(類,方法等)
dontshrink
Plugin plugin = getPlugins().hasPlugin("AppPlugin") ?
getPlugins().findPlugin("AppPlugin") :
getPlugins().findPlugin("LibraryPlugin")
if (plugin != null) {
List<String> runtimeJarList
if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
runtimeJarList = plugin.getRuntimeJarList()
} else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {
runtimeJarList = android.getBootClasspath()
} else {
runtimeJarList = plugin.getBootClasspath()
}
for (String runtimeJar : runtimeJarList) {
//給 proguard 新增 runtime
libraryjars(runtimeJar)
}
}
proguard-rules.pro檔案
這裡我沒有做什麼程式碼過濾混淆的,只寫了一句
#忽略警告
-ignorewarnings
執行gradle proguardJar 執行完畢生成混淆包
本文到此結束。