2016-07-21 7 views
0

Ich habe ein Android-Projekt, bestehend aus einer Java-Ebene für die Benutzeroberfläche und einer C++ - Ebene für den Kern der Anwendung, die den größten Teil des Codes enthält.VS2015 - Referenzieren von .so-Dateien in Android-Projekt

Diese zwei Ebenen sind zwei separate Visual Studio 2015-Projekte/-Lösungen, das "UI" -Projekt ist ein "Basisanwendungsprojekt (Android, Gradle)" und das "Core" -Projekt ist eine "Dynamic Shared Library (Android) "erzeugt einen .so, der beim Start von Java geladen wird.

Ich möchte, dass mein "UI" -Projekt auf das "Core" -Projekt verweist, ohne den C++ - Code zugänglich zu machen, wenn das "UI" -Projekt geöffnet wird.

Was ich dachte bisher:

  • einen Verweis auf das „Core“ Projekt in der „UI“ Projekt hinzufügen, die die saubere Art und Weise zu sein scheint, dies zu tun, aber das macht auch die C++ Code zugänglich, was ich nicht möglich sein möchte.

  • Kein Verweis auf das "Core" -Projekt im "UI" -Projekt, sondern "referenzieren" einfach die .so generiert vom "Core" -Projekt in das "UI" -Projekt. Aber ich weiß nicht, wie ich das machen soll. Und da es keinen tatsächlichen Verweis auf das "Core" -Projekt gibt, wird das "UI" -Projekt nicht automatisch das "Core" -Projekt neu kompilieren, wenn eine Änderung daran vorgenommen wurde, was mich dazu zwingt, es manuell zu machen.

Gibt es eine saubere Möglichkeit zu tun, was ich tun möchte? Vielen Dank.

Antwort

1

Leider können Sie cpp-Projekt nur kompilieren, wenn es in Ihrer Lösung ist. Wenn Sie Ihren Code verstecken möchten, sollten Sie Ihre lib verlinken, aber wenn Sie Änderungen an cpp-Code vornehmen, müssen Sie ihn erneut kompilieren.

Ich benutze Android Studio, aber Methoden ist nicht zu anders. Wenn ich meinen cpp code verstecken und einfach libs benutzen will (zB schreibe ich es in eine andere IDE), mache ich eine Skriptdatei, die von AS läuft (von VS in deinem Fall, build event vielleicht) und baue meinen cpp Teil. Verwendung von externer Libs

+0

Vielen Dank für Ihre Antwort

Aber häufiger bauen wir beiden Teile zusammen und nur auf Release.Phase verstecke ich meinen cpp Teil. Tatsächlich könnte ich Prebuild-Ereignisse erstellen, um das C++ - Projekt vor dem Erstellen des Java-Projekts neu zu kompilieren. Ich werde das versuchen. Der Grund, warum ich C++ verstecken muss, liegt darin, dass das Java-Projekt von einer anderen Firma erstellt wurde, also "geheim" bleiben muss. Ich bin mir nicht sicher, deinen letzten Satz zu verstehen. Was genau meinst du mit "release stage"? Sprechen Sie über die Release-Konfiguration? Und wie hast du dein C++ an dieser Stelle? – Virus721

+0

Oh, ich möchte nur sagen, dass, wenn mein cpp-Code bereit ist und ich ihn nicht bald ändern werde, ich ihn einfach erstellen und .so oder .a libs verwenden werde. Aber wenn ich noch etwas sowohl in cpp als auch in Java-Code ändere, verbirg ich keinen nativen Code. In Ihrem Fall würde ich das Build-Cmd-Skript verwenden. Ich hoffe es hilft –