記錄一次整合第三方功能遇到的問題,包含so包問題,最小sdk問題還有資源覆蓋問題
第三方sdk簡介:
一個aar包,內部有一個armeabi的so包,一個jar包,一個res資源包;
製作:
本著解耦和模組化的原則,建了一個module,單獨來實現相關的功能;這個module叫做tvu
小成果:
demo裡依賴這個module,成功能接入功能;
But:
將這個module匯入專案中時,問題就多了,本專案,涉及多個module,幾乎每個module裡都有so包;
遇到的問題:
- 由於tvu本身依賴了aar,那麼依賴tvu的專案,在專案的app的build.gradle裡應該宣告:
repositories {
mavenCentral()
flatDir {
dirs project(':tvu').file('libs')
}
}
由於tvu的minisdk=19,而專案的minisdk<19,應該在tvu清單檔案裡宣告:
目前tvu的aar裡只有armeabi型別的so包,而專案中主要做的armeabi-v7a相容,此處有兩種做法:
1-所有的so包,都補上個armeabi型別的,兩點不好,效能差,apk包大;
2- 反向解壓更改aar中的jni裡的so包,改為armeabi-v7a,再壓縮更改為aar;tvu的so包扛不住混淆,出現了類似問題:**java.lang.UnsatisfiedLinkError:
JNI_ERR returned from JNI_OnLoad in** ……注意規避,或者專案都不混淆,或者類似的在混淆檔案裡新增:
-libraryjars ../XXX(此處為library名稱)/src/main/jniLibs/armeabi/xxxxx.so
-libraryjars ../XXX(此處為library名稱)/src/main/jniLibs/armeabi-v7a/xxxxx.so
-…tvu的jar包裡,values檔案裡有個string資源< string name=”normal” >metadata< /string >,這是某個功能的開關,專案裡也有個< string name=”normal” >一般< /string >,本著資源覆蓋的原則,那個metadata開關會被覆蓋,導致功能打不開,報了個莫名其妙的view的空指標,所以專案裡的這個normal應該改名,真坑。