2016-08-16 2 views
2

Die Umgebung ...Android Native, die eine dynamische Bibliothek verweist nicht

ich ein brandneues Visual Studio 2015 Android NDK Lösung haben zu implementieren. Dies enthält 2 Projekte (der Standardvorlagencode, der von Visual Studio generiert wird):

  • Eine native Aktivität. Hier möchte ich Android-spezifischen Code einfügen. Es hat einige Standard-Code, der die Bildschirmfarbe zwischen grün und schwarz verblasst.
  • Ein "Packaging" -Projekt zur Unterstützung bei der Bereitstellung.
  • Ich habe dies erfolgreich auf einem virtuellen Intel HAXM-Gerät sowie auf einem realen Gerät über USB angeschlossen. Alles gut bis jetzt.

    Ich habe dann ein dynamisches Android-Bibliotheksprojekt (.so) hinzugefügt - das ist, wo ich Kerncode (Plattform Agnostic) setzen möchte. Ich habe einen Verweis auf diese Core-Bibliothek aus dem nativen Aktivitätsprojekt hinzugefügt.

    Alles kompiliert und verbindet gut. Ich kann immer noch eine .APK-Datei erstellen.

    Weitere Informationen:

    • Android SDK 5.1 (Android-22)
    • Android NDK 21
    • x86
    • Clang 3.8
    • C++ 11
    • mit Nicht-Dateien oder Gradle Stellen

    Das Problem ...

    Nun, wenn ich auf dem virtuellen/realen Gerät bereitstellen ich die folgende Fehlermeldung erhalten (von logcat genommen)

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.NATester/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.NATester-2/lib/x86/libNATester.so 
    

    Dinge, die ich versucht habe ...

  • Ändern der Core-Bibliothek in statische (.a)
  • überprüft das Android-Gerät, um zu sehen, ob die Datei existiert - es existiert.
  • Manuelles Bereitstellen der .APK auf dem Android-Gerät.
  • Einige Artikel haben vorgeschlagen, Java-Code zu verwenden, um die Bibliotheken zu laden - ich möchte Java-Code z. System.LoadLibrary als das scheint wie ein Hack - Ich denke, dass es möglich sein sollte, eine reine C++ - Anwendung auf Android zu haben. Ich kann nicht die einzige Person sein, die auf dieses Problem trifft ?!

    Das sieht relevant, aber alt und wieder eine unnötige Hack für das, was sehr häufig auftretende Situation sein muss - Can't load native shared library with dependencies in a native activity app - https://github.com/ikonst/android-dl

    Für das, was ihren Wert, ich bin ein erfahrener C# Entwickler mit Visual Studio (15 Jahre). Ich nehme daher viele Dinge bei der Entwicklung von Apps als selbstverständlich hin - das ist mein erstes Projekt mit C++/Android und es scheint eher ein manueller Kampf, um alles zum Laufen zu bringen!

    Antwort

    0

    Seit einiger Zeit kämpft man, aber am Ende ist es gelungen, die Bibliotheken zu implementieren.

    Klicken Sie mit der rechten Maustaste auf das Projekt [theProject (Andorid-xx)] im Projektmappen-Explorer und wählen Sie Neues Element hinzufügen, fügen Sie Ihre .so-Bibliothek hinzu.

    Klicken Sie mit der rechten Maustaste auf die neu hinzugefügte Bibliothek und wählen Sie Eigenschaften, Elementtyp sollte Bibliothek sein, Inhalt auf Ja setzen, damit wird die Lib bereitgestellt.

    Verwandte Themen