关于jni编译32位、64位动态库(Android.mk和Application.mk文件)

 

最近新项目需要编译64位的动态库,这里记录如何配置。

在jni目录下加入Android.mk和Application.mk文件。

 

 

Application.mk

1 APP_ABI := armeabi armeabi-v7a arm64-v8a

Android.mk

1 LOCAL_PATH := $(call my-dir)
2 include $(CLEAR_VARS)
3 
4 LOCAL_MODULE := hello-jni
5 LOCAL_SRC_FILES := hello-jni.c
6 
7 include $(BUILD_SHARED_LIBRARY)

 

加上这两个mk文件后,编译就会生成armeabi、armeabi-v7a、arm64-v8a的库文件。

 

补充:

 

Android.mk文件是用来向build system(编译系统)描述你的源文件的,比如你要编一个静态库(.a文件)  或 一个动态库(.so文件),将由build system解析一次或者多次。

Application.mk目的是GNU Makefile的一部分,描述你的应用所依赖的编译系统中的模块(静态库或动态库)。

 

在Android.mk文件中判断64位还是32位

 1 ifneq ($(filter $(NDK_KNOWN_DEVICE_ABI64S),$(TARGET_ARCH_ABI)),)
 2 # 64-bit ABIs
 3 
 4 ……
 5 ……
 6 
 7 else
 8 # 32-bit ABIs
 9 
10 ……
11 ……
12 ……
13 
14 
15 endif

 

编译目标类型

每个Android.mk文件后面都会指明要编译什么类型的输出,比如下面:

 

编译动态库 : include $(BUILD_SHARED_LIBRARY)    

编译静态库 : include $(BUILD_STATIC_LIBRARY)

输出已编译好的so文件 : include $(PREBUILT_SHARED_LIBRARY)

编译jar文件 : include $(BUILD_JAVA_LIBRARY)

输出已编译好的apk文件 : include $(BUILD_PREBUILT)

编译apk文件 : include $(BUILD_PACKAGE)

 

 

 

posted on 2016-12-09 14:39  屌丝迷途  阅读(6600)  评论(0编辑  收藏  举报

导航