Я пытаюсь создать и отладить внешнюю исходную библиотеку Java/C++ внутри Android Studio 2.2, но я не могу понять, как это сделать или если это возможно.Как создавать/отлаживать внешнюю библиотеку 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 или Makefile, найденную в источнике Mapbox внутри созданного мастером CMakeLists.txt. Надеюсь, что библиотека, которую он построит, будет отлаживаемой. Альтернативно, статическая связь также была бы приемлемой, если бы я мог отлаживать исходный код 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) –