[Android]proguard重新編譯和如何不混淆第三方jar包


轉載自:http://glblong.blog.51cto.com/3058613/1536516

一、ant安裝、環境變量配置及驗證

(一)安裝ant

到官方主頁http://ant.apache.org下載新版(目前為Ant1.9.4)的ant,得到的是一個apache-ant-1.9.4-bin.zip的壓縮包。將其解壓到你的硬盤上,例如:C:\apache-ant-1.9.4。

(二)配置環境變量

window中設置ant環境變量:

ANT_HOME    C:/ apache-ant-1.9.4

path             C:/ apache-ant-1.9.4/bin

classpath      C:/apache-ant-1.9.4/lib

注意:

配置環境變量:我的電腦----屬性-----高級----環境變量

如:ANT_HOME:C:\apache-ant-1.9.4

    PATH:%ANT_HOME%\bin (為了方便在dos環境下操作)

實驗了總是失敗,沒辦法換成地址 C:/ apache-ant-1.8.1/bin,而不再使用變量。。。成功了。。

 

 

(三)驗證ant

為了驗證ant是否成功安裝,可以進行如下操作:

依次選擇:開始->運行->cmd,輸入如下命令:ant

如果出現如下內容,說明安裝成功:

Buildfile: build.xml does not exist!

Build failed

 

wKiom1Ph9nHz2wx3AACfOJYRBFY704.jpg

【說明ant安裝成功!因為ant默認運行build.xml文件,這個文件需要我們建立。】

 

二、運行ant打包proguard

cmd進入proguard目錄下的build.xml所在目錄,如我的:

D:\Program Files\adt-bundle-windows-x86_64-20130729\sdk\tools\proguard\build

 

然后運行ant便會在lib目錄下重新生成新的的proguard.jar文件。

wKioL1Pi2oiiiAruAAHydpv5G9Q345.jpg

 

 

 

如何不混淆第三方jar包

今天遇到了一個混淆的問題,怎么用語法解決都不行

看了下錯誤日志:發現是在proguard讀取jar包里的類的時候,有個類導致了java I.O異常

由於是第三方的包,於是就去跟第三方溝通了。

結果第三方也無法解決。

這個時候我本來的思路是重新修改proguard的源代碼,在讀取到這個有問題的jar包時跳過,並且直接編譯一個自定義的版本。

 

做到一半的時候被老大點醒了,於是想到之前的另一種方法:這種方法還是我先試過的,真是慚愧。

當你怎么-keep 第三方jar包都沒有用的時候,參考一下下面方法:

1,拿一個未混淆的包,對其反編譯,在反編譯出來的smali文件中,找到第三方jar包的路徑:

D:\JianTiLianYun\baidupacker\temp\smali\com\zhangyue\util

這是我的一個路徑,然后把出問題的包的smali文件全拷貝了;

 

2,對你原來的包進行混淆,可這時混淆失敗怎么辦呢?

直接打開jar包,將出問題的類刪除掉,然后rebuild一下項目,再混淆;

如果是整個JAR包,且這些jar包被代碼使用了,不能隨意刪。

那這個時候,理論上可以手動引用該jar包(不要放在lib文件夾中),

在android studio中,需要在項目設置里將dependency中的改jar包的scope改為provided,如果是compiled還是會報混淆錯誤。

然后,混淆成功!

3,將混淆成功的apk反編譯,手動加入第一步中獲取到的smali文件,再重新打包。

這時候發現程序正常運行!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM