《Gradle权威指南》--Android Gradle NDK支持

No1:

在根项目下的local.properties文件中配置

sdk.dir=/home/frame/android/android-sdk
ndk.dir=/home/frame/android/android-ndk

在gradle.properties里配置

android.useDeprecatedNdk=true

No2:

配置so库的模块名,是在build.gradle脚本文件里配置

android{
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    
    defaultConfig{
        applicationId "org.flysnow.app.example132"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName '1.0.0'
        
        ndk{
            moduleName 'helloworld'
        }
    }
    buildTypes{
        release{
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
            zipAlignEnabled true
        }
    }
}

No3:

android{
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
}

申明NDK级别必须是Android SDK和Android NDK都存在的API级别,否则找不到相应的NDK就会报找不到jni.h这个错误

No4:

多平台编译

生成so文件包含4个平台架构:armeabi、armeabi-v7a、mips、x86

android{
    compileSdkVersion 23
    buildToolsRevision "23.0.1"
    
    defaultConfig{
        applicationId  "org.flysnow.app.example132"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName '1.0.0'
        
        ndk{
            moduleName 'helloworld'
            abiFilters 'armeabi-v7a','x86'
        }
    }
}

No5:

第三方的so库放到特定的目录src/main/jniLibs,和jni目录平级

例:x86的so库放在src/main/jniLibs/x86/

armeabi的so库放在src/main/jniLibs/armeabi-v7a/

No6:

使用NDK提供的库,比如:liblog、libz、libandroid等

android{
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    
    defaultConfig{
        applicationId "org.flysnow.app.example132"
        targetSdkVersion 23
        
        ndk{
            moduleName 'helloworld'
            ldLibs 'log','z'
        }
    }
}

注:moduleName不能带有lib前缀

No7:

C++库支持

1)libstdc++,默认的,迷你版C++运行库

2)gabi++_static,GAbi++运行库,静态的,支持C++异常和RTTI特性

3)gabi++_shared,GAbi++运行库,动态的,支持C++异常和RTTI特性

4)stlport_static,STLport运行库,静态的,支持C++异常、RTTI和标准库

5)stlport_shared,STLport运行库,动态的,支持C++异常、RTTI和标准库

6)gnustl_static,GUN STL,静态的,支持C++异常、RTTI和标准库

7)gnustl_shared,GUN STL,动态的,支持C++异常、RTTI和标准库

8)c++_static,LLVM libc++运行库,静态的,支持C++异常、RTTI和标准库

9)c++shared,LLVM libc++运行库,动态的

例:

在Application.mk中配置

APP_STL :=gnustl_static

gradle中配置

android{
    defaultConfig{
        ndk{
            moduleName 'helloworld'
            abiFilter 'armeabi-v7a'
            abiFilter 'x86'
            ldLibs 'log','z'
            stl 'gnustl_static'
        }
    }
}

------------------------------------

启用C++异常

APP_CPPFLAGS += -fexceptions

gradle配置

android{
    defaultConfig{
        ndk{
            moduleName 'helloworld'
            abiFilter 'armeabi-v7a'
            abiFilter 'x86'
            ldLibs 'log','z'
            stl 'gnustl_static'
            cFlags '-fexceptions'
        }
    }
}

启用RTTI

android{
    defaultConfig{
        ndk{
            moduleName 'helloworld'
            abiFilter 'armeabi-v7a'
            abiFilter 'x86'
            ldLibs 'log','z'
            stl 'gnustl_static'
            cFlags '-fexceptions -frtti'
        }
    }
}

 持续集成平台可以使用Jenkins

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值