2013-03-06 61 views
4

Heyho。我和这个人有同样的错误信息: “Android NDK app failed to load library” 并且我正在尝试将这些答案转移到我的情况几个小时,但它不起作用。 有人可以帮我吗? 这是这个开源项目,我想尝试让它在我的模拟器上运行。 https://github.com/itskewpie/FreeRDP-androidAndroid SDK应用未能加载库

FreeRDPActivity.java

package net.itskewpie.freerdp; 

import android.app.Activity; 
import android.os.Bundle; 

public class FreeRDPActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
    static {  
     System.loadLibrary("freerdp"); 
    } 
} 

freerdp.c

#include <jni.h> 
#include <stdio.h> 
#include <freerdp/freerdp.h> 

jstring Java_net_itskewpie_freerdp_FreeRDPActivity_test(JNIEnv* env, jobject thiz) 
{ 
    android_main();  
    return (*env)->NewStringUTF(env, "HELLO"); 
} 

Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

MY_LIBS_PATH=freerdp-1.0-nevo/libs/armeabi-v7a 
LOCAL_MODULE := freerdp-utils 
LOCAL_SRC_FILES := $(MY_LIBS_PATH)/libfreerdp-utils.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/freerdp-1.0-nevo/include 
include $(PREBUILT_STATIC_LIBRARY) 
... 

错误消息:

FATAL EXCEPTION: main 
java.lang.ExceptionInInitializerError 
java.lang.Class.newInstanceImpl(Native Method) 
java.lang.Class.newInstance(Class.java:1319) 
android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
android.app.ActivityThread.access$600(ActivityThread.java:141) 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
android.os.Handler.dispatchMessage(Handler.java:99) 
android.os.Looper.loop(Looper.java:137) 
android.app.ActivityThread.main(ActivityThread.java:5041) 
java.lang.reflect.Method.invokeNative(Native Method) 
java.lang.reflect.Method.invoke(Method.java:511) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
dalvik.system.NativeStart.main(Native Method) 
java.lang.UnsatisfiedLinkError: Couldn't load freerdp from loader dalvik.system.PathClassLoader[dexPath=/data/app/net.itskewpie.freerdp-2.apk,libraryPath=/data/app-lib/net.itskewpie.freerdp-2]: findLibrary returned null 
java.lang.Runtime.loadLibrary(Runtime.java:365) 
java.lang.System.loadLibrary(System.java:535) 
net.itskewpie.freerdp.FreeRDPActivity.<clinit>(FreeRDPActivity.java:16) 
... 15 more 

回答

0

您是否像在github项目中一样复制了Android.mk?你也复制了相关的图书馆吗?

# 
    ## libfreerdp.so 
    # 
    include $(CLEAR_VARS) 
    LOCAL_MODULE := freerdp 
    LOCAL_SRC_FILES := freerdp.c 
    LOCAL_ARM_MODE := arm 
    NDK_TOOLCHAIN_ROOT=/opt/android-toolchain 
    LOCAL_STATIC_LIBRARIES := freerdp-utils 
    LOCAL_STATIC_LIBRARIES += freerdp-locale 
    LOCAL_STATIC_LIBRARIES += freerdp-crypto 
    LOCAL_STATIC_LIBRARIES += freerdp-sspi 
    LOCAL_STATIC_LIBRARIES += freerdp-codec 
    LOCAL_STATIC_LIBRARIES += freerdp-core 
    LOCAL_STATIC_LIBRARIES += freerdp-cache 
    LOCAL_STATIC_LIBRARIES += freerdp-gdi 
    LOCAL_STATIC_LIBRARIES += freerdp-rail 
    LOCAL_STATIC_LIBRARIES += freerdp-channels 
    LOCAL_STATIC_LIBRARIES += rdpsnd_alsa 
    LOCAL_STATIC_LIBRARIES += cliprdr 
    LOCAL_STATIC_LIBRARIES += rdpsnd 
    LOCAL_STATIC_LIBRARIES += freerdp_android 

在Java方面,它看起来像你应该加载其他库为好,以适当的顺序:

static { 
    System.loadLibrary("freerdp-utils"); 
    System.loadLibrary("freerdp-codec"); 
    System.loadLibrary("freerdp-gdi"); 
    System.loadLibrary("freerdp-core"); 
    System.loadLibrary("freerdp-rail"); 
    System.loadLibrary("freerdp-chche"); 
    System.loadLibrary("freerdp-crypto"); 
    System.loadLibrary("freerdp-sspi"); 
    System.loadLibrary("freerdp-channels"); 
    System.loadLibrary("rdpsnd_alsa"); 
    System.loadLibrary("cliprdr"); 
    System.loadLibrary("rdpsnd"); 
    System.loadLibrary("freerdp_android"); 
    System.loadLibrary("freerdp"); 
} 
+0

是的,我完全按照github项目复制它。加载了其他图书馆,但它以相同的错误信息结束。 – trek711 2013-03-07 08:24:41

+0

@ trek711您是否在jni文件夹中运行了ndk-build命令?你的错误表示android无法找到freerdp库。通过运行ndk-build,您可以生成适当目录中所需的所有库。 – Esparver 2013-03-07 10:00:23

+0

是的,我做到了。 EHM。我现在放弃了。但无论如何谢谢你。 – trek711 2013-03-08 12:26:17