在Android Studio中,自帶反編譯查看class文件,如果沒有混淆的話,class文件跟java文件基本沒有區別了,為了保護,還是混淆的好。
網上看了不少資料,都是直接下載proguard額外jar,直接生成,覺得不方便,既然apk都能混淆,為什么不直接通過Android Studio來混淆jar包呢。
做法其實很簡單,一個build文件,一個proguard文件就可以了。
首先要明白jar從哪里來,以前在Eclipse中是一個project設置為library,然后另外一個主project依賴它。build一下,在library中就會生成jar文件了。
在Android Studio是module的概念,其實也相當於project。主app module依賴其它子module,在打包時,會將其它module打成aar,賦給主app。所以jar是針對整個module來make的。
如果module內僅僅是java代碼,生成jar是沒問題的,但如果還有resource文件,那就得打aar文件了。
在你要打jar包的module build文件中,加上一個生成jar包的task。其實即使不添加,在整個工程build時也會生成jar文件的。在build/intermediates/bundles/release/classes.jar可以找到。只是沒混淆罷了。
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'
}
這個時候,在Termial中就輸入./gradlew makeJar就能將classes.jar復制倒http.jar了。這個時候還是沒混淆的,因為混淆根本沒寫。
如果module中同時也依賴其它libs,那需要在proguard中聲明那些libs。比如:#-libraryjars libs\gson-2.2.2.jar,大部分都跟apk混淆類似的,只不過是局限於某個module而已。
附送一個proguard供大家參考,也是網上找的。最后混淆效果並不是很好,只是簡單的將部分變量改成了abcd這樣,不過也夠了。總不能將方法也混淆,這樣外部調用就麻煩了。