• 《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

  • 相关阅读:
    SQL Server数据库中批量替换数据的方法
    js 鼠标移上去弹出层效果
    50个jQuery代码段帮你成为更好的JavaScript开发者
    MSN、腾讯QQ、SKYPE、阿里旺旺网页在线客服源代码
    正则表达式基础知识
    常用邮箱POP3和SMTP服务器汇总
    CS5序列号
    如何使用Oracle SQLDeveloper 中连接MS SQLServer和MySQL数据库
    Silverlight与后台数据库的三种技术实现基本的互操作(转)
    ADO 与ADO.NET
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8665952.html
Copyright © 2020-2023  润新知