問題:打jar包時候,發現多次打了個空包
原因:應該是全部都被混淆忽略掉了,此時需要留一個入口class文件不可混
開發過程中往往會引用到第三方的jar包或者library或者so文件,那麼怎樣將自己的一些文件打成jar包供別人使用或者自己使用呢,還有那些文件中的jar中可能會涉及到一些重要的接口和方法,又怎樣混淆呢?今天小冷總結一下如何將library打包成jar包並做混淆處理
準備好自己將要打包的library
圖一中的library是我即將打包的library裏面含有兩個工具類文件
圖一
在mylibrary.gradle文件中做混淆打包的配置
因爲IDE環境問題 classes.jar生成的位置也不同否則構建工程時候會報錯,這邊小冷得批評下谷歌
* What went wrong
Cannot expand ZIP 'mylibrary\build\intermediates\bundles\release\classes.jar
Android Studio3.1.2之前的配置
def SDK_BASENAME = "myjar";
def SDK_VERSION = "_v1.0.0";
def sdkDestinationPath = "build/outputs/jar/";
def zipFile = file('build/intermediates/bundles/release/classes.jar')
task deleteBuild(type: Delete) {
delete sdkDestinationPath + SDK\_BASENAME + SDK\_VERSION + ".jar"
}
task makeJar(type: Jar) {
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: \['assets/**'\]) // 打包assets目錄下的所有文件
baseName = SDK\_BASENAME + SDK\_VERSION
destinationDir = file(sdkDestinationPath)
}
makeJar.dependsOn(deleteBuild, build)
Android Studio3.1.2之後的配置
def SDK_BASENAME = "myjar";
def SDK_VERSION = "_v1.0.0";
def sdkDestinationPath = "build/outputs/jar/";
def zipFile = file('build/intermediates/packaged-classes/release/classes.jar')
task deleteBuild(type: Delete) {
delete sdkDestinationPath + SDK\_BASENAME + SDK\_VERSION + ".jar"
}
task makeJar(type: Jar) {
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: \['assets/**'\]) // 打包assets目錄下的所有文件
baseName = SDK\_BASENAME + SDK\_VERSION
destinationDir = file(sdkDestinationPath)
}
makeJar.dependsOn(deleteBuild, build)
如下圖:
圖二
在proguard-rules.pro文件中配置混淆文件
proguard-rules.pro混淆文件地址點我查看
在Terminal命令窗口下輸入打包命令:
$ gradlew makeJar
直到下面生成BUILD SUCCESSFUL的提示就打包成功了。我剛開始在輸入這個gradlew makeJar命令時候多次報 找不到 Tool.jar的錯誤,沒辦法我只能重裝了一遍jdk(淚奔)然後順利解決。最後就神奇在output文件夾下發現一個jar文件。如下圖
圖三
引用自己的jar測試能不能用
引用後發現系統已經將裏面的參數做了混淆 如下圖
圖四
小冷在打jar包時候,發現多次打了個空包。應該是全部都被混淆忽略掉了,此時需要留一個入口class文件不可混略。在生成Jar時可能會出現各種奇葩的錯誤,只要根據錯誤提示來修改就沒啥問題。
github中的demo地址
Android studio下將library打包成jar並加密混淆github中demo傳送門
作者:shawnleng
鏈接:https://www.jianshu.com/p/e23ccaf4b41f
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。