Android studio 通过Android Studio 2.3包含静态库
我有三个使用Android NDK的项目。前两个构建静态库(一个包含另一个)。我正试图将它们作为第三个版本的构建的一部分,但根据我在android studio 2.3中设置应用程序的方式,会出现各种错误 我已经阅读了关于这个问题的其他问题,但它们都提到将库构建为同一个makefile的一部分。我需要能够将两者构建为不同make的一部分,并从相对路径引用内部lib 下面是我能创建的最基本的示例 修建内部图书馆效果良好。构建包装器库也很有效,我可以通过在创建的.a文件上运行nm来判断这一点Android studio 通过Android Studio 2.3包含静态库,android-studio,android-ndk,android-gradle-plugin,Android Studio,Android Ndk,Android Gradle Plugin,我有三个使用Android NDK的项目。前两个构建静态库(一个包含另一个)。我正试图将它们作为第三个版本的构建的一部分,但根据我在android studio 2.3中设置应用程序的方式,会出现各种错误 我已经阅读了关于这个问题的其他问题,但它们都提到将库构建为同一个makefile的一部分。我需要能够将两者构建为不同make的一部分,并从相对路径引用内部lib 下面是我能创建的最基本的示例 修建内部图书馆效果良好。构建包装器库也很有效,我可以通过在创建的.a文件上运行nm来判断这一点 PL
PLNA007982-MBP:arm64-v8a ginger.mcmurray$ nm libInnerLibrary.a
inner-library.o:
0000000000000000 n $d.1
0000000000000000 n $d.2
0000000000000000 n $d.3
0000000000000000 n $d.4
0000000000000000 n $d.5
0000000000000000 n $d.6
0000000000000000 r $d.7
0000000000000000 n $d.8
0000000000000000 t $x.0
0000000000000000 T innerLibraryMethod
PLNA007982-MBP:arm64-v8a ginger.mcmurray$ nm libWrapperLibrary.a
wrapper-library.o:
0000000000000000 n $d.1
0000000000000000 n $d.2
0000000000000000 n $d.3
0000000000000000 n $d.4
0000000000000000 n $d.5
0000000000000000 n $d.6
0000000000000000 r $d.7
0000000000000000 n $d.8
0000000000000000 t $x.0
U innerLibraryMethod
0000000000000000 T wrapperLibraryMethod
我在这里找到的所有答案中都遵循了这些建议,但都不起作用。github上的当前版本未生成。错误是
/Users/ginger.mcmurray/Jay-s-POC/ndk-test/hello-jni/app/src/main/cpp/src/hello-jni.c
Error:(34) undefined reference to 'wrapperLibraryMethod'
WrapperLibrary方法在libWrapperLibrary.a中定义,但未被生成找到。确保同时生成了libWrapperLibrary.a和libinnerLibrary.a。您需要这两个库的副本(例如在jniLibs中)。下面的CMakeLists.txt从其自然位置拾取内部库,为我省去了复制的麻烦 必须分别添加这两个库,并在
target\u link\u库
中明确指定它们:
cmake_minimum_required(VERSION 3.4.1)
add_library( wrapper-lib
STATIC
IMPORTED )
add_library( inner-lib
STATIC
IMPORTED )
set_target_properties( # Specifies the target library.
wrapper-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libWrapperLibrary.a )
set_target_properties( # Specifies the target library.
inner-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
${CMAKE_CURRENT_SOURCE_DIR}/../../../../../inner-library/obj/local/${ANDROID_ABI}/libInnerLibrary.a )
add_library(hello-jni SHARED
src/hello-jni.c)
# Include libraries needed for hello-jni lib
target_link_libraries(hello-jni
wrapper-lib inner-lib
android
log)
目标链接库中库的顺序可能很重要。为了安全起见,我将内部放在包装后
ndk build
允许指定使用一个静态库(包括预构建库)还需要另一个静态库。这与您的场景无关,因为无法将此信息从ndk buildish转换为CMAKESHndk build
单独构建它们,这只是一个练习,在现实生活中,它们将从外部源预构建。但是,如果您自己至少构建了包装库,那么如果您也为生成的共享库使用ndk build
,可能会让您省去很多麻烦。Android Studio与ndk build
的集成并不比与CMake
的集成差,但将这两个系统与gradle混合使用是愚蠢的确保同时构建了libWrapperLibrary.a和libinernerlibrary.a。您需要这两个库的副本(例如在jniLibs中)。下面的CMakeLists.txt从其自然位置拾取内部库,为我省去了复制的麻烦 必须分别添加这两个库,并在
target\u link\u库
中明确指定它们:
cmake_minimum_required(VERSION 3.4.1)
add_library( wrapper-lib
STATIC
IMPORTED )
add_library( inner-lib
STATIC
IMPORTED )
set_target_properties( # Specifies the target library.
wrapper-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libWrapperLibrary.a )
set_target_properties( # Specifies the target library.
inner-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
${CMAKE_CURRENT_SOURCE_DIR}/../../../../../inner-library/obj/local/${ANDROID_ABI}/libInnerLibrary.a )
add_library(hello-jni SHARED
src/hello-jni.c)
# Include libraries needed for hello-jni lib
target_link_libraries(hello-jni
wrapper-lib inner-lib
android
log)
目标链接库中库的顺序可能很重要。为了安全起见,我将内部放在包装后
ndk build
允许指定使用一个静态库(包括预构建库)还需要另一个静态库。这与您的场景无关,因为无法将此信息从ndk buildish转换为CMAKESHndk build
单独构建它们,这只是一个练习,在现实生活中,它们将从外部源预构建。但是,如果您自己至少构建了包装库,那么如果您也为生成的共享库使用ndk build
,可能会让您省去很多麻烦。Android Studio与ndk build
的集成并不比与CMake
的集成差,但将这两个系统与gradle混合使用是愚蠢的嗨,金吉尔,你收到了什么样的错误信息?这些错误消息可能有助于我们调试问题。谢谢。@MartinK.Brown:对不起,不知怎的,它从原来的帖子上被删掉了。它现在在那里。(当然,我所说的“莫名其妙”是指“用户错误”):)嗨,金吉尔,你收到了什么样的错误消息?这些错误消息可能有助于我们调试问题。谢谢。@MartinK.Brown:对不起,不知怎的,它从原来的帖子上被删掉了。它现在在那里。(当然,“莫名其妙”是指“用户错误”):)非常感谢!这正是我所需要的非常感谢你!这正是我所需要的