zoukankan      html  css  js  c++  java
  • NDK开发-Android Studio+gradle-experimental开发ndk

    在最新的Android Studio2.2的preview版中,增加全新的ndk支持,使用了新的gradle,以及DSL语言。

    新的NDK需要使用新的Gradle插件和新的Android插件来支持!

    gradle-experimental plugin

    修改项目(project)的buidle.gradle文件,使用全新的gradle插件:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle-experimental:0.7.0'
        }
    }

    需要gradle-2.10以上的支持

    com.android.model.application/library

    由于全新的gradle-experimental插件使用了新的DSL语言,所以也需要用新的android插件com.android.model.applicationcom.android.model.library来替换老版中的com.android.applicationcom.android.library plugins:

    老版本DSL:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"
    
        defaultConfig {
            applicationId "com.dean.testndk"
            minSdkVersion 14
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
    
    
            ndk{
                moduleName "test"           //生成的so名字
                abiFilters "armeabi", "armeabi-v7a", "x86"  //指定输出abi体系结构下的so库
                //  stl "stlport_shared"
                //  ldLibs "log", "z", "m"
                //  cFlags "-I/some/include/path"
            }
        }
    
    
        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:23.3.0'
    }

    新版DSL:

    apply plugin: 'com.android.model.application'
    
    model {
        android {
            compileSdkVersion = 23
            buildToolsVersion = "23.0.2"
    
            defaultConfig {
                applicationId = "com.dean.testndk"
                minSdkVersion.apiLevel = 14
                targetSdkVersion.apiLevel = 23
                versionCode = 1
                versionName = '1.0'
            }
            ndk {
                moduleName = 'test'
                ldLibs.addAll(['android', 'log'])
            }
            buildTypes {
                release {
                    minifyEnabled = false
                    proguardFiles.add(file('proguard-android.txt'))
                }
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.3.0'
    }

    简单对比新老DSL还是有很多变化的。而目前这个版本的gradle已经明确说是experimental的,所以还是先等正式版出来为好。

    带来的改变

    使用新插件后,只要在gradle中引入了ndk标签,就可以激活ndk的功能:

    model {
        android {
        //...
        ndk {
            moduleName "mymodule"
        }
      }
    }

    当我们编写好一个本地方法后,不需要在用javah去生成头文件,现在可以通过Android Studio直接生成!

    ndk的所有配置都可以写在gradle中:

    android.ndk {
            moduleName = "mymodule"
            ldLibs.addAll(['log'])
            ldFlags.add("")
            toolchain = "clang"
            toolchainVersion = "3.9"
            abiFilters.add("x86")
            CFlags.add("")
            cppFlags.add("")
            debuggable = false
            renderscriptNdkMode = false
            stl = "system"
            platformVersion = 15
        }

    ABI的配置:

    android.abis {
            create("x86") {
                cppFlags.add('-DENABLE_SSSE3')
                ldLibs.add('')
                ldFlags('')
            }
            create("armeabi-v7a") {
                cppFlags.addAll(["-mhard-float", "-D_NDK_MATH_NO_SOFTFP=1", "-mfloat-abi=hard"])
                ldLibs.add("m_hard")
                ldFlags.add("-Wl,--no-warn-mismatch")
            }
        }

    正常NDK的最后一步需要使用ndk-build脚本生成.so文件,而新版gradle插件直接把这部也省略了。

    最后

    Google ndk开发的官方例子
    https://github.com/googlesamples/android-ndk

    新版Gradle官方指南:
    http://tools.android.com/tech-docs/new-build-system/gradle-experimental

    参考博客原文:
    http://ph0b.com/new-android-studio-ndk-support/

    Android Studio NDk调试(基于gradle-experimental插件与LLDB):
    http://www.jianshu.com/p/178a2169b7ff

  • 相关阅读:
    zoomer.for.jquery 图片效果(缩小、放大)
    简体、繁体字转换 Microsoft AppLocale 实用程序
    jquery图片效果(缩小放大)
    JQuery自动为表格增加一列
    HTTP 错误 403.9 禁止访问:连接的用户过多怎么办?
    控件数组
    apache服务无法启动
    枚举记录不同斜率值 set容器——pku3668
    分数最佳接近——pku3039
    01背包——[Usaco2008 Dec]Hay For Sale
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6168019.html
Copyright © 2011-2022 走看看