zoukankan      html  css  js  c++  java
  • 《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

  • 相关阅读:
    (转)使用BigDecimal进行精确运算
    date——sql查询
    (转)每天一个linux命令(8):cp 命令,复制文件和文件夹
    (转)每天一个linux命令(15):tail 命令
    (转)Linux 下 查看以及修改文件权限
    (转)用JUnit4进行单元测试
    (转)Spring Boot Junit单元测试
    (转)ZXing解析二维码
    (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
    (转)js jquery.qrcode生成二维码 带logo 支持中文
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8665952.html
Copyright © 2011-2022 走看看