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