我一直在試圖構建和調試Android Studio 2.2內部的外部Java/C++源庫,但我無法弄清楚如何做到這一點,或者如果可能的話。如何構建/調試Android Studio外部源庫?
具體而言,我試圖使用https://github.com/mapbox/mapbox-gl-native庫,但我懷疑這個解決方案可能與任何Java/C++庫類似。在這種情況下,庫包含一個Makefile和一個CMakeLists.txt文件。
我還沒有看到的CMakeLists.txt是如何使用的,但我一直在使用的命令建造的Mapbox庫從來源:
BUILDTYPE=Debug make android
我已經使用過Android Studio嚮導創建一個項目,並選擇了C++選項,創建成功構建和調試樣本的.cpp:
// native-lib.cpp
#include <jni.h>
#include <string>
extern "C"
jstring
Java_com_example_kea_mapboxtest_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
它還創建一個應用程序/文件的CMakeLists.txt。
我正在尋找反正我可以建立和調試第三方C++源庫。我最好的猜測是,有一些方法可以修改嚮導生成的app/CMakeLists.txt文件,但我猜這是做什麼的,我無法弄清楚。
究其原因,我認爲這可能是正確的道路上走的是嚮導生成的應用程序/的CMakeLists.txt包含:
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.
add_library(# Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
# Associated headers in the same location as their source
# file are automatically included.
src/main/cpp/native-lib.cpp
這似乎工作。我一直在想,可能會引用庫CMakeLists.txt或在嚮導生成的CMakeLists.txt中的Mapbox源代碼中找到的Makefile。希望它構建的庫可以調試。或者讓它靜態鏈接也是可以接受的,只要我可以調試到庫中的C++源代碼。
謝謝。
Thanks Craig。我對CMake完全陌生。我訂購了一本書來看看它是否會有所幫助,但那是距離抵達的幾周。我沒有在網上找到很多東西,甚至在Android Studio中進行調試的時候也更少。爲了闡明OP,我使用Make構建了庫,並使用它創建了一個項目,但是調試器不會進入C++,因此我不相信即使我理解了您的帖子,也會在解決問題之後解決問題閱讀您發送的鏈接。不錯,庫更新,但用AS調試真的是問題。讓我讀更多,然後我會帶你聊天提供。 – Mitch
好的,我已經做了一些嘗試,但是一切都沒有成功,或者在某些情況下崩潰了Android Studio。我越看你的建議,越少我認爲它會起作用。原因是它看起來你的「沙箱」仍然會失去調試信息。當然是全新的,我只是在猜測這個。如果你認爲這可能允許鏈接,我會很高興給它一個。我需要更多的幫助來理解CMake命令的進行。謝謝。 – Mitch
討論轉移到聊天[這裏](http://chat.stackoverflow.com/rooms/124759/cmake-and-mapbox-issue) –