天天看點

java.io.IOException: Can't read ...((No such file or directory))

今天需要将公司的一個Eclipse上的項目打包成apk,萬萬沒想到,遇到這麼一個坑,先直接貼報錯代碼

java.io.IOException: Can't read [E:\eclipse-workspace\*****\libs\alipaySDK-jar] (No such file or directory)
[-- :: *****]     at proguard.InputReader.readInput(InputReader.java:)
[-- :: *****]     at proguard.InputReader.readInput(InputReader.java:)
[-- :: *****]     at proguard.InputReader.readInput(InputReader.java:)
[-- :: *****]     at proguard.InputReader.execute(InputReader.java:)
[-- :: *****]     at proguard.ProGuard.readInput(ProGuard.java:)
[-- :: *****]     at proguard.ProGuard.execute(ProGuard.java:)
[-- :: *****]     at proguard.ProGuard.main(ProGuard.java:)
           

報錯資訊說的是在混淆的時候沒有找到這個第三方庫

百度了挺久,百度出來的東西真的是想笑,找到的好幾篇文章,東西都是一模一樣,東抄抄西抄抄,有點無語。不過好在還是有一點用,給我靈感的是這句話:

抛出這樣的異常的原因是第三方jar的引用路徑不對,沒有找到這個需要忽略混淆的jar包。

解決方案:

在整個項目的proguard-project.txt檔案中,添加如下代碼:

當然alipaySDK-20170922這個是你自己的架包名字,我這裡是支付寶的,接着又順便去看了一下有沒有支付寶添加混淆規則,發現果然少了一些東西,加上吧:

-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep class com.alipay.sdk.app.H5PayCallback {
    <fields>;
    <methods>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}
           

再進行打包apk操作就不會報錯了

繼續閱讀