Android.mk基础知识

本文最后更新于:2025年7月20日 晚上

Android 浅度解析:mk预置AAR、SO文件、APP包和签名-阿里云开发者社区: https://developer.aliyun.com/article/1488469

android系统添加预置APP(so库自动释放) - 庚拓天下 - 博客园: https://www.cnblogs.com/genggeng/p/10563585.html

使用@符号和不使用@符号的区别
在Android.mk中,使用@符号和不使用@符号有一些区别:
? 使用@符号可以提高性能,因为不需要解压和拷贝SO文件,也可以节省空间,因为不需要存储多余的SO文件。
? 不使用@符号可以提高兼容性,因为可以针对不同的平台提供相应的SO文件,而不需要考虑APK中是否有对应平台的SO文件。

Android.mk解析与使用看这篇就够了 - 知乎

调试时集成so到apk

在Android源码中如何吧so库打包编译进入apk, 集成第三方库(jar和so库)

集成第三方so和jar包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=securitysdk:libs/hello.jar

ifeq (arm64, (strip(TARGET_ARCH)))

LOCAL_PREBUILT_LIBS := libssl:libs/arm64-v8a/libssl.so

LOCAL_PREBUILT_LIBS += libcrypto:libs/arm64-v8a/libcrypto.so

LOCAL_PREBUILT_LIBS += libvivosgmain:libs/arm64-v8a/libaa.so

else

LOCAL_PREBUILT_LIBS := libssl:libs/armeabi-v7a/libssl.so

LOCAL_PREBUILT_LIBS += libcrypto:libs/armeabi-v7a/libcrypto.so

LOCAL_PREBUILT_LIBS += libvivosgmain:libs/armeabi-v7a/libtest.so

endif
include $(BUILD_MULTI_PREBUILT)

把so库包含进入apk

LOCAL_JNI_SHARED_LIBRARIES := libssl libcrypto libvivosgmain

LOCAL_MODULE_INCLUDE_LIBRARY := true

后面Android某个源码版本不支持LOCAL_MODULE_INCLUDE_LIBRARY这一处理了,加入下面

LOCAL_MODULE_TAGS := tests

注意编译后控制台输出的 APK路径

1)假设so库是已经存在的,不需要重新编译的话。只需要用LOCAL_PREBUILT_JNI_LIBS指定(注意包含so的路径)

2)假设so需要编译,则需要先用LOCAL_JNI_SHARED_LIBRARIES指定,然后再用LOCAL_MODULE_INCLUDE_LIBRARY := true打包so到apk

最好还要编写jni下的android.mk

3)LOCAL_MULTILIB := both 32和64都编译。


Android.mk基础知识
https://iwesley.top/article/eaba12cd/
作者
Wesley
发布于
2024年11月17日
许可协议