我有一个同时包含java和NDK(C代码)的应用程序。这个应用程序在摩托罗拉Xoom上正常运行,但在Archos 101平板电脑上失败了。
以下是有问题的代码:
static {
try
{
System.loadLibrary("cube");
}
catch (Exception ex)
{
Log.d("scroll", ex.getMessage());
}
}
以下是错误的logcat转储:
DEBUG/dalvikvm(10198): Trying to load lib /data/data/com.gorglucks.cubendk/lib/libcube.so 0x45497b18
INFO/dalvikvm(10198): Unable to dlopen(/data/data/com.gorglucks.cubendk/lib/libcube.so): Cannot load library: link_image[1995]: failed to link libcube.so
WARN/dalvikvm(10198): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lcom/gorglucks/cubendk/Main;.<clinit>
WARN/dalvikvm(10198): Class init failed in newInstance call (Lcom/gorglucks/cubendk/Main;)
DEBUG/AndroidRuntime(10198): Shutting down VM
WARN/dalvikvm(10198): threadid=1: thread exiting with uncaught exception (group=0x4001d8a8)
ERROR/AndroidRuntime(10198): FATAL EXCEPTION: main
ERROR/AndroidRuntime(10198): java.lang.ExceptionInInitializerError
ERROR/AndroidRuntime(10198): at java.lang.Class.newInstanceImpl(Native Method)
ERROR/AndroidRuntime(10198): at java.lang.Class.newInstance(Class.java:1429)
ERROR/AndroidRuntime(10198): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
ERROR/AndroidRuntime(10198): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
ERROR/AndroidRuntime(10198): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
ERROR/AndroidRuntime(10198): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
ERROR/AndroidRuntime(10198): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
ERROR/AndroidRuntime(10198): at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/AndroidRuntime(10198): at android.os.Looper.loop(Looper.java:123)
ERROR/AndroidRuntime(10198): at android.app.ActivityThread.main(ActivityThread.java:4627)
ERROR/AndroidRuntime(10198): at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(10198): at java.lang.reflect.Method.invoke(Method.java:521)
ERROR/AndroidRuntime(10198): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(10198): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(10198): at dalvik.system.NativeStart.main(Native Method)
ERROR/AndroidRuntime(10198): Caused by: java.lang.UnsatisfiedLinkError: Library cube not found
ERROR/AndroidRuntime(10198): at java.lang.Runtime.loadLibrary(Runtime.java:461)
ERROR/AndroidRuntime(10198): at java.lang.System.loadLibrary(System.java:557)
ERROR/AndroidRuntime(10198): at com.gorglucks.cubendk.Main.<clinit>(Main.java:24)
ERROR/AndroidRuntime(10198): ... 15 more
我的C库libcube.so位于libs / armeabi / libcube.so中,并显示在eclipse Project explorer中。我已经通过查看CubeNDK.apk验证了这一点。
我还尝试使用以下方法加载lib:
System.load("/data/data/com.gorglucks.cubendk/lib/armeabi/libcube.so");
这也失败了。
同样,这在摩托罗拉Xoom上运行良好。总的来说,与Archos 101合作非常令人沮丧。 usb驱动程序在64位PC上不适用于我,但可以在较旧的32位PC上运行。
提前致谢 杰里
答案 0 :(得分:0)
通过消除和挖掘文档android-ndk-r7 / docs / STABLE-APIS.html的过程,资产管理器在API级别8(Froyo)中不可用。
这解决了我的链接问题,但又产生了另一个问题:
如何在不使用资产管理器的情况下从ndk访问assets目录中的文件?