您的位置:首页 > 移动开发 > Android开发

android.mk和gradle两种配置生成so文件

2017-07-12 13:19 357 查看
android studio 有2种方法可以把c/c++生成so文件

1.通过配置Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello   //生成的so库名称
LOCAL_SRC_FILES := hello.c  //要生成so的源文件

include $(BUILD_SHARED_LIBRARY)

配置Application.mk

APP_ABI := armeabi armeabi-v7a x86  //生成支持多种cpu的so库

补充:

cpp文件全部位于android项目下的jni文件夹下,结构如下

jni
|---1.cpp
|---2.cpp
|---Android.mk
|---Application.mk
|---ndk_test.cpp
|---src
| |---core
| | |---core1.cpp
| | |---core2.cpp
| |---src1.cpp
| |---src2.cpp
[/code]

按照通常的写法,在android.mk中,应该写入
LOCAL_SRC_FILES := ndk_test.cpp \
1.cpp \
2.cpp \
src/src1.cpp \
src/src2.cpp \
src/core/core1.cpp \
src/core/core2.cpp


繁琐不堪!


初步解法:一句话引入单个目录(不包括子目录)下的所有cpp源文件

继续上面的情况为例,我可以这样写

MY_CPP_LIST := $(wildcard $(LOCAL_PATH)/*.cpp
4000
)
MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/src/*.cpp)
MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/src/core/*.cpp)


2.通过ndk配置生成,在buidle中配置

apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "24.0.1"

defaultConfig {
applicationId "com.test.nodepp.testjni"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"

//ndk编译生成.so文件
ndk {
moduleName "goo"         //生成的so名字
ldLibs "log", "z", "m"   //链接时使用到的库,对应LOCAL_LDLIBS
abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
}


补充手动添加多个文件生成一个so的方法



//ndk编译手动添加多个c生成.so文件
ndk {
moduleName = "goo"
cppFlags += "-I${file("src/main/jni/native_app_glue")}".toString()
cppFlags += "-I${file("src/main/jni")}".toString()
cppFlags += "-I${file("src/main/jni/data")}".toString()
ldLib
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: