1. 程式人生 > >記錄一次整合第三方功能遇到的問題,包含so包問題,最小sdk問題還有資源覆蓋問題

記錄一次整合第三方功能遇到的問題,包含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應該改名,真坑。