今天在用studio写Native程序时发现2.2版本引入了一个 External Build来进行Native项目的构建。
最直观的表现就是c/c++的源码文件不用跟java文件在一个项目文件夹下了。而且与之前的在gradle中配置,然后自动生成makefile相比,灵活度大大增加,再也不用蛋疼到处找makefile对应的gradle语句了。
使用方法如下:
可以在任意文件夹用Android.mk跟Application.mk组织c/c++代码
如我的文件结构为:
---hook ---Android.mk ---Application.mk ---hook_d ------Android.mk ------main.c ---hook_so ------Android.mk ------main.c
在sudio新建一个jni文件夹,在Android视图模式下会显示为cpp文件夹
右键选择 Link C++ Project with Gradle
Builde System有 CMake 跟 ndk-build可选,如果用ndk-build选项的话要选择native项目最顶级的Android.mk文件
导入之后效果如下
最后再提一下刚学会的一个项目编译多个so文件的方法
---hook ---Android.mk ---Application.mk ---hook_d ------Android.mk ------main.c ---hook_so ------Android.mk ------main.c
拿上边的文件结构为例
hook/Androi.mk
include $(call all-subdir-makefiles)
hook/hook_d/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_CFLAGS += -pie -fPIE LOCAL_LDFLAGS += -pie -fPIE -llog TARGET_PLATFORM := android-22 LOCAL_MODULE := hook_d LOCAL_SRC_FILES := main.c include $(BUILD_EXECUTABLE)
hook/hook_so/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ARGET_PLATFORM := android-22 LOCAL_MODULE := hook_so LOCAL_SRC_FILES := main.c include $(BUILD_SHARED_LIBRARY)
原理就是 all-subdir-makefiles 这个宏会返回只文件夹下所有Android.mk文件的路径
时间: 2024-10-20 04:43:04