记录一次集成第三方功能遇到的问题,包含so包问题,最小sdk问题还有资源覆盖问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cysion1989/article/details/79024311

第三方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应该改名,真坑。

猜你喜欢

转载自blog.csdn.net/cysion1989/article/details/79024311
今日推荐