在同一Android App中使用ARMv7和ARM库

时间:2013-04-19 13:29:37

标签: android android-ndk arm andengine dropbox-api

我正在努力在同一个Android应用中使用Dropbox(Sync API)和Andengine。两者都使用本机库,据我所知,Andengine是为ARMv7a和Dropbox for ARM系统开发的。单独运行应用程序的每个部分,一切正常。但是,组合这两个部分会导致:java.lang.UnsatisfiedLinkError:无法加载DropboxSync:findLibrary返回null。

一旦此文件夹存在,似乎只检查了库的 armeabi-v7a 文件夹?但是,libDropboxSync.so仅位于 armeabi 文件夹中。

使用运行Android 4.1.2的Nexus S测试所有内容。

提前致谢,
斯蒂芬

2 个答案:

答案 0 :(得分:1)

来自$NDK/docs/CPU-ARCH-ABIS.html:如果找到primary-abi,则不会扫描secondary

III.3. Automatic extraction of native code at install time:
-----------------------------------------------------------

When installing an application, the package manager service will scan
the .apk and look for any shared library of the form:

     lib/<primary-abi>/lib<name>.so

If one is found, then it is copied under $APPDIR/lib/lib<name>.so,
where $APPDIR corresponds to the application's specific data directory.

If none is found, and a secondary ABI is defined, the service will
then scan for shared libraries of the form:

你可以通过;

来检查
$ adb shell getprop|grep abi
[ro.product.cpu.abi2]: [armeabi]
[ro.product.cpu.abi]: [armeabi-v7a]

你可以看到主要的abi比次要的更具体。

解决方案方面,您可以在armv7-a下移动armv5库。 工作,但只有Google Play下的此类设备才能看到它。

答案 1 :(得分:0)

查看第3点和第4点

  
      
  1. 在Android Studio中,切换到“项目视图”。
  2.   
  3. 从下载的SDK中的libs目录中,将dropbox-sync-sdk-android.jar拖到项目的app / libs目录中。
  4.   
  5. 右键单击dropbox-sync-sdk-android.jar并选择“Add as library”。在出现的对话框中单击“确定”。
  6.   
  7. 在app / src / main下的项目中创建一个名为jniLibs的新目录。从SDK中,将armeabi,armeabi-v7a,mips和x86拖入   新的jniLibs目录。
  8.