Android Studio導出Jar包並混淆

在Android Studio中,自帶反編譯查看class文件,若是沒有混淆的話,class文件跟java文件基本沒有區別了,爲了保護,仍是混淆的好。java

網上看了很多資料,都是直接下載proguard額外jar,直接生成,以爲不方便,既然apk都能混淆,爲何不直接經過Android Studio來混淆jar包呢。app

作法其實很簡單,一個build文件,一個proguard文件就能夠了。gradle

首先要明白jar從哪裏來,之前在Eclipse中是一個project設置爲library,而後另一個主project依賴它。build一下,在library中就會生成jar文件了。ui

在Android Studio是module的概念,其實也至關於project。主app module依賴其它子module,在打包時,會將其它module打成aar,賦給主app。因此jar是針對整個module來make的。ip

若是module內僅僅是java代碼,生成jar是沒問題的,但若是還有resource文件,那就得打aar文件了。get

在你要打jar包的module build文件中,加上一個生成jar包的task。其實即便不添加,在整個工程build時也會生成jar文件的。在build/intermediates/bundles/release/classes.jar能夠找到。只是沒混淆罷了。it

task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar
injars 'build/intermediates/bundles/release/classes.jar'
// 混淆後的jar路徑
outjars 'build/http.jar'
// 具體須要keep住的類
configuration 'proguard-rules.pro'
}io

這個時候,在Termial中就輸入./gradlew makeJar就能將classes.jar複製倒http.jar了。這個時候仍是沒混淆的,由於混淆根本沒寫。編譯

若是module中同時也依賴其它libs,那須要在proguard中聲明那些libs。好比:#-libraryjars libs\gson-2.2.2.jar,大部分都跟apk混淆相似的,只不過是侷限於某個module而已。class

附送一個proguard供你們參考,也是網上找的。最後混淆效果並非很好,只是簡單的將部分變量改爲了abcd這樣,不過也夠了。總不能將方法也混淆,這樣外部調用就麻煩了。

proguard-rules.pro

相關文章
相關標籤/搜索