#java #android #c #android-studio #java-native-interface
#java #Android #c #android-studio #java-native-interface
Вопрос:
Я создал проект Android Studio с поддержкой C с одним библиотечным модулем. Файл с именем C native-lib.cpp
был автоматически добавлен в мой проект. Когда я создаю проект сейчас, выходное имя файла * .so libnative-lib.so
равно .
Если я переименую native-lib.cpp
что-нибудь еще (используя функцию рефакторинга / переименования), файл C просто исчезнет из моего проекта, пока я не изменю имя обратно.
Итак, как мне переименовать мою собственную библиотеку или задать имя выходного файла?
Комментарии:
1. Что не так с именем выходного файла?
2. Проверьте Android.mk файлы в вашем проекте.
3. Если вы используете новые функции поддержки Android Studio C , покажите нам
build.gradle
или, если вы используетеCMake
, покажитеCMakeLists.txt
файл. Кроме того, убедитесь, что после изменения имени вы меняете его в своем коде при загрузке библиотеки:System.loadLibrary("myname.so")
4. @NicolasFilotto Если я создаю несколько библиотек, их нельзя вызвать все «native-lib.so » верно? или это как-то сработает, если каждый из них находится в своем *.aar ? Я предполагаю, что это все еще одна «собственная библиотека» для каждого процесса.
5. @Перемещенные
Android.mk
файлы больше не используются в Android studio.
Ответ №1:
Я рад, что вы смогли это понять. Я все равно опубликую ответ здесь для справки.
CMakeLists.txt <<= должно быть в корневом каталоге вашего модуля приложения ( my_project/app/CMakeLists.txt
)
# https://developer.android.com/studio/projects/add-native-code.html#create-cmake-script
# Minimum version of CMake
cmake_minimum_required(VERSION 3.4.1)
# adding CEC library
# add_library structure: add_library(lib_name lib_type_STATIC_or_SHARED source_file_path)
add_library(my_lib_name SHARED src/main/jni/my_cpp_file.cpp)
# include_directories is to provide the path to you native lib code
# include_directories structure: include_directories(native_lib_folder_path)
include_directories(src/main/jni/)
# adding Android log library
# find_library is used to find NDK API libraries (built in NDK libs)
# find_library structure: find_library(name_you_want_to_call_the_lib lib_name_in_ndk_api)
find_library(log-lib log)
# linking log lib to our native lib
# once you find the library, you have to link that library with your native library
# target_link_libraries structure: target_link_libraries(you_native_lib lib_found_using_find_library)
target_link_libraries(my_lib_name ${log-lib})
Затем в build.gradle выполните следующие действия
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}
Затем выполните полную очистку, обновите проект C , используя опцию, указанную в меню Сборки.
И, как @bitwise posted, если необходимо, удалите содержимое build
.externalNativeBuild
папки и и перестройте проект.
Комментарии:
1. У меня та же проблема, что и у моего CMakeLists.txt находится в папке cpp, но до того, как я переименовал свое имя файла cpp, проблем не было.