前言
由于項(xiàng)目要對(duì)接華為Anyoffice平臺(tái),所以需要引入對(duì)應(yīng)SDKjar包和so庫料睛。其實(shí)網(wǎng)上有很多資料可以查到:AS下如何導(dǎo)入jar包和so庫冗疮。但是正因?yàn)橘Y料很多,所以說法不一损趋,有些配置已經(jīng)不再適用,有一些則寫的比較混亂椅寺,容易引起誤導(dǎo)浑槽。同時(shí)也出于總結(jié)的原因,所以才有了這篇文章返帕。
導(dǎo)入jar包
- 將需要導(dǎo)入的jar包復(fù)制到module/libs/目錄下
- 修改module/build.gradle文件的dependencies閉包桐玻,編輯這個(gè)文件有兩種方法:
加入編譯jar包的代碼,點(diǎn)擊AS自動(dòng)彈出的sync now即可荆萤。
dependencies {
compile files('libs/AnyOfficeSDK.jar')
}
如果你不想在引入每個(gè)jar時(shí)镊靴,都進(jìn)行上面的操作。那么你完全可以添加下面這行代碼,表示編譯所有的jar包偏竟。同樣點(diǎn)擊AS自動(dòng)彈出的sync now
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
}
導(dǎo)入so庫
- 在module/src/main目錄下新建文件夾算行,文件夾名稱為jniLibs,注意大小寫不要寫錯(cuò)了
- 將需要導(dǎo)入的so庫復(fù)制到j(luò)niLibs目錄下即可
遇到的問題
我按照上面的步驟成功導(dǎo)入了jar包和so庫苫耸,編譯并且打包成功州邢。但是在運(yùn)行app時(shí),閃退褪子!通過抓取日志量淌,發(fā)現(xiàn)沒有找到j(luò)ar包的方法:
No pending exception expected: java.lang.NoSuchMethodError: no static method
為什么明明導(dǎo)入了jar包,卻仍然找不到j(luò)ar包中的方法呢嫌褪?由此懷疑是否jar包沒有打入apk中呢呀枢?又或者已經(jīng)打入apk,系統(tǒng)為什么沒有找到呢笼痛?那什么會(huì)影響編譯打包呢裙秋?由此我想到了混淆,打開proguard.cfg文件缨伊,添加如下代碼:
-dontwarn com.huawei.**
-keep class com.huawei.**{*;}
-dontwarn 表示讓ProGuard不要警告找不到com.huawei.** 這個(gè)包里面的類的相關(guān)引用
-keep class 表示保持com.huawei.** 這個(gè)包里面的所有類和所有方法不被混淆
再次編譯打包摘刑,發(fā)現(xiàn)apk大小要明顯大于之前的包。運(yùn)行app刻坊,問題解決枷恕!