• (原)使用android studio ndk开发流程


    先使用android stuido创建一个app工程,创建工程的时候,.gradle目录结构下为2.8目录.(note:2.10目录为后续更新结果出现。)
    依次修改上述红色方框标注部分内容:
    1)修改gradle/wrapper/gradle-wrapper.properties目录内容:
     
    2)修改工程目录下的build.gradle,主要是修改gradle插件这部分内容:
     
     
    3)修改app/build_gradle内容:
    修改前原始内容:
    apply plugin: 'com.android.application'
     
    android {
        compileSdkVersion 24
        buildToolsVersion "24.0.1"
     
        defaultConfig {
            applicationId "com.example.walkera.serialndkdemo"
            minSdkVersion 14
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
        }
        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.1.1'
    }
    修改后的内容:
     
    apply plugin: 'com.android.model.application'

    model {
    android {
    compileSdkVersion = 22
    buildToolsVersion = "22.0.1"

    defaultConfig.with {
    applicationId = "com.example.walkera.serialndkdemo"
    minSdkVersion.apiLevel = 7
    targetSdkVersion.apiLevel = 22
    }
    }
    android.ndk {
    moduleName = "serialport"
    ldLibs.addAll(["android", "log"])
    /*
    * Other ndk flags configurable here are
    * cppFlags.add("-fno-rtti")
    * cppFlags.add("-fno-exceptions")
    * ldLibs.addAll(["android", "log"])
    * stl = "system"
    */
    }
    android.buildTypes {
    release {
    minifyEnabled = false
    proguardFiles.add(file('proguard-rules.txt'))
    }
    }
    android.productFlavors {
    create("arm") {
    ndk.abiFilters.add("armeabi")
    }
    create("arm7") {
    ndk.abiFilters.add("armeabi-v7a")
    }
    create("arm8") {
    ndk.abiFilters.add("arm64-v8a")
    }
    create("x86") {
    ndk.abiFilters.add("x86")
    }
    create("x86-64") {
    ndk.abiFilters.add("x86_64")
    }
    create("mips") {
    ndk.abiFilters.add("mips")
    }
    create("mips-64") {
    ndk.abiFilters.add("mips64")
    }
    // To include all cpu architectures, leaves abiFilters empty
    create("all")
    }
    }
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    }
    上面这个是我编译成功的完整的配置文件,我使用的android studio 版本为1.5;
    上述过程全部为工程配置内容,对于源码部分的内容:
    先是在package目录下,创建一个调用.c文件的jni java文件,这个文件的作用主要是调用由c/c++文件生成的so文件内容,即jni api文件:
    接下来我们可以直接编译整个工程了。(note:上面截图中的jni是在编译后才创建的,在这一步的时候,还没有添加c/c++文件,也没有jni目录)
    在编译成功以后,使用AS的终端或者window自带的终端,运行javah -jni  com.example.walkera.serialndkdemo.SerialPortNdk命令。
    注意,这个命令是有讲究的:
    1)首先是这个命令执行的目录,必须为项目目录下appuildintermediatesclassesalldebug目录
    
    

    2)com.example.walkera.serialndkdemo.SerialPortNdk这个命名,前半部分必须为package名[com.example.walkera.serialndkdemo],后面的SerialPortNdk为调用后续c/c++库的类名。


    
    
    javah命令运行成功以后,会生成一个.h的头文件。
     
    然后我们这个时候src/main/目录下创建一个jni目录,并创建一个c/c++的源文件,这个源文件就是我们需要开发的jni native。
    同时将.h头文件拷贝到jni目录下来,根据.h头文件构建并实现自己需要的jni native方法。
     
     
    大功告成之后,我进行了整个工程的编译,编译未报错,按照网上的说法,我于是寻找so文件的生成,很多文章介绍是在libs目录下,但我却始终找不到,于是以为我工程有问题,哪一步设置出错了,但编译又正常,奇怪了。后来同事让我运行试一下,结果可以正常运行,这就奇怪了,咋没so生成?于是找了一下,发现:
     
    在新的studio版本中,中间库so文件的生成,主要看目录:
     
     
     
     
     
    整个大致流程就这样。
     
    author:   lihaiping1603
    email:     lihaiping1603@aliyun.com
     
    出自:http://www.cnblogs.com/lihaiping/p/5829264.html
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    【转】日本留学——修士申请注意事项
    【转】日本留学读研究生和修士有什么区别?申请误区有哪些
    【转】为什么说学一门小语种,就能打开新世界的大门?
    【转】TED:两年一门外语--她总结了学外语的秘诀
    【转】为什么一定要学一门外语?
    【转】学完标准日本语初级至高级,可以过日语n1吗?
    【转】去日本语言学校前,日语应该达到几级呢?
    Cordova学习
    敏捷开发实录(二)
    Mac端博客发布工具推荐
  • 原文地址:https://www.cnblogs.com/lihaiping/p/5829264.html
Copyright © 2020-2023  润新知