android.mk 如何依赖so库
时间: 2023-10-18 11:06:30 浏览: 36
要在 Android.mk 中依赖一个 .so 库,需要使用以下语法:
```
include $(CLEAR_VARS)
LOCAL_MODULE := my_module
LOCAL_SRC_FILES := my_source_files.cpp
LOCAL_LDLIBS += -llog -landroid -lmy_so_library
include $(BUILD_SHARED_LIBRARY)
```
其中,`LOCAL_LDLIBS` 参数可以用来添加链接到目标库的其他 .so 库。在上面的例子中,`-lmy_so_library` 将链接到名为 `libmy_so_library.so` 的库。
如果要在 Makefile 中使用这个模块,可以使用以下语法:
```
LOCAL_SHARED_LIBRARIES += my_module
```
这将在编译时自动将 `my_module` 模块链接到您的应用程序中。
相关问题
Android Studio使用Android.mk编译so库
以下是使用Android.mk编译so库的步骤:
1. 在项目的根目录下创建一个名为jni的文件夹,并在其中创建一个名为Android.mk的文件。
2. 在Android.mk文件中,指定要编译的源文件和生成的库文件名。例如,如果你要编译名为hello.c的源文件,并将生成的库文件命名为libhello.so,则可以使用以下代码:
```makefile
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
```
3. 在项目的根目录下创建一个名为Application.mk的文件,并在其中指定要使用的NDK版本和CPU架构。例如,如果你要使用NDK版本r16b,并支持armeabi-v7a和arm64-v8a架构,则可以使用以下代码:
```makefile
APP_PLATFORM := android-16
APP_ABI := armeabi-v7a arm64-v8a
```
4. 在项目的build.gradle文件中,添加以下代码以指定要使用的NDK版本和要编译的架构:
```gradle
android {
// ...
externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
}
}
defaultConfig {
// ...
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
```
5. 在Android Studio的Terminal中,使用cd命令进入到jni目录,并执行以下命令来编译so库:
```shell
$ cd jni
$ ndk-build
```
6. 编译完成后,生成的so库文件将位于jni目录下的libs文件夹中。将其复制到app/src/main/jniLibs目录下即可。
Android.mk内置带so库的apk
在Android.mk文件中,可以通过使用LOCAL_PREBUILT_SHARED_LIBRARY指令来将预编译的.so库打包到apk中。
具体步骤如下:
1. 在Android.mk文件中添加以下代码:
```
include $(CLEAR_VARS)
LOCAL_PREBUILT_SHARED_LIBRARY := libtest.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libtest
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
```
2. 将预编译的.so库文件放到工程目录下的任意位置。
3. 执行make命令进行编译,即可在apk中看到打包好的.so库。
需要注意的是,预编译的.so库文件需要与当前工程所使用的NDK版本和CPU架构相匹配,否则可能会出现链接错误或运行时崩溃等问题。