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

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

按照通常的写法,在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)
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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值