昨天接入了tinker 发现其他的都能更新就是.so更新不了。今天找了找问题记录一下。
既然要用.so热更新,我们就用tinker给我们提供的加载so库文件的方法。他们给我们提供了一个TinkerLoadLibrary这个类,我们调用这个里边的方法就行了。
public TextJni(Context context) {
TinkerLoadLibrary.loadLibraryFromTinker(context, "lib/armeabi-v7a", "native-lib");
TinkerLoadLibrary.loadLibraryFromTinker(context, "lib/mips", "native-lib");
TinkerLoadLibrary.loadLibraryFromTinker(context, "lib/x86", "native-lib");
// TinkerLoadLibrary.loadArmLibrary(context, "native-lib");
// TinkerLoadLibrary.loadArmV7Library(context, "native-lib");
}
public native String stringFromJNI();
可以进入这个方法看下里边的代码理解的更加清楚一点。
但是,我用写完ndk生成了.so文件全部拿过来了,结果出现了兼容的错误,不知道什么情况,好像这个方法调用后32和64的都加载进去了,在这有两个方法可以解决,
1.
defaultConfig {
...
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
在这里配置一下就好了 ,
2.把你的不兼容的.so删掉
现在换掉.so文件然后生成差分包就可以热更新了。不知道怎么生成差分包的看上一篇博客。接入tinker