3 Stimmen

System.load zum Laden von Bibliotheken

Ich habe eine Bibliothek aus dem /system/libs/my_lib.so Verzeichnis erfolgreich. Wie kann ich die C/C++-Funktionen verwenden, die in dieser Bibliothek definiert sind?

public class MainFrom extends Activity {

    private static final String LOG_TAG = "MainFrom";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main); 
        // How to use the functions of test_lib.so? 

        /*
            java.lang.UnsatisfiedLinkError: stringFromC

        String s1 = stringFromC(), s2 = stringFromCpp();

        Log.w(LOG_TAG, stringFromC());   
        Log.w(LOG_TAG, stringFromCpp());  */
    }

    public native String stringFromC();
    public native String stringFromCpp();

    static {
        try { 
            System.load("/system/lib/test_lib.so");
            Log.i(LOG_TAG, "MainFrom. Success!");
        } catch (UnsatisfiedLinkError e) {
            Log.e(LOG_TAG, "MainFrom. UnsatisfiedLinkError");
        }
    }

}

stringFromC y stringFromCpp bestehen in .c y .cpp Dateien, die kompiliert wurden zu test_lib.so

4voto

Maksim Dmitriev Punkte 5627

Ich habe mein Problem gelöst.

Es war notwendig zu schreiben

System.load("/system/lib/libtest_lib.so");

anstelle von

System.load("/system/lib/test_lib.so");

Sehr seltsam. Wenn ich laufe

adb shell 
ls /system/lib

Ich werde die Datei test_lib.so sehen. Warum ist es korrekt, die Bibliothek mit lib Vorwahl?

0voto

N.Droid Punkte 2043

Müssen Sie LOCAL_CPPFLAGS := $(YOURMODULE_CPPFLAGS) und in LOCAL_SRC_FILES := yourfile.cpp in Ihrer Android.mk-Datei, um die .cpp-Datei mit Android NDK zu kompilieren.

Ich hoffe, es wird Ihnen helfen.

0voto

Tianyu Wang Punkte 1

Ab Android 7.0 verhindert das System, dass Apps dynamisch gegen Nicht-NDK-Bibliotheken gelinkt werden, was zu einem Absturz der App führen kann. Diese Änderung des Verhaltens zielt darauf ab, eine konsistente App-Erfahrung über Plattform-Updates und verschiedene Geräte hinweg zu schaffen.

Android 7.0 ändert Beschreibung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X