4

Heyho. I've got the same error message as this guy: "Android NDK app failed to load library" and i'm trying to transfer these answers here on my situation for hours now, but it doesnt work. Can someone help me? It's this opensource project here, which i want to try to get it run on my emulator. https://github.com/itskewpie/FreeRDP-android

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)
...

Error Message:

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
Community
  • 1
  • 1
trek711
  • 207
  • 3
  • 11

2 Answers2

1

try out this open source project:

www.freerdp.com

Michael Walz
  • 300
  • 2
  • 9
0

Did you copy the Android.mk exactly as in the github project? Did you copy the relevant libraries too?

    #
    ## 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

In the Java side, it looks like you should load the other libraries as well, in the appropriate order:

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");
} 
Esparver
  • 1,515
  • 1
  • 15
  • 28
  • yes, i copied it exactly as in the github project. loaded the other librarys, but it's ending in the same error message. – trek711 Mar 07 '13 at 08:24
  • @trek711 Did you run the ndk-build command in the jni folder? Your error says that android can't find the freerdp library. By running the ndk-build you generate all the libraries needed in the appropiate directories. – Esparver Mar 07 '13 at 10:00