在我的测试项目中,我使用android“ pay.cards”库(https://github.com/faceterteam/PayCards_Android) 我将其作为AAR包含在内,并且效果很好。
compile(name:'paycards-sdk-release', ext:'aar')
然后我添加项目本机方法调用。
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
}
private native String getFirstName();
private native String getLastName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((TextView)findViewById(R.id.tv1)).setText(getFirstName());
((TextView)findViewById(R.id.tv2)).setText(getLastName());
}
}
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}
...
在那之后,pay.scan库无法加载库:
static {
System.loadLibrary("opencv_java3");
System.loadLibrary("cardrecognizer");
}
在这种情况下 抛出java.lang.UnsatisfiedLinkError。
dalvik.system.PathClassLoader [DexPathList [[zip文件“ /data/app/-2/base.apk"],nativeLibraryDirectories=[/lib/arm64,/ system / fake-libs64,/ data / app /- 2 / base.apk!/ lib / arm64-v8a,/ system / lib64,/ vendor / lib64]]]找不到“ libopencv_java3.so”
但是,当我禁用自己的本机方法(只是从build.gradle中删除externalNativeBuild部分)时,一切都会再次按预期进行。
在这种情况下,有人可以建议吗?
我是NDK开发人员的新手,所以任何想法对我都会有所帮助。
答案 0 :(得分:0)
如您所见, cardrecognizer 库是为32位ARM(armeabi-v7a)构建的。在短期内,您可以为同一ABI构建本机库。通常由 build.gradle 脚本中的abiFilters控制。
但是,如果您打算在Play商店中分发应用,则还应该学习为arm64构建第三方库。 Google announced于2019年8月达到此要求。