先使用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)首先是这个命令执行的目录,必须为项目目录下app\build\intermediates\classes\all\debug\目录

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
 
 
 
 
 
 
 
 
 
 
 

(原)使用android studio ndk开发流程的更多相关文章

  1. 【Android】Android Studio NDK 开发

    Android Studio NDK 开发 记录在Android Studio中NDK简单开发的步骤 用到的Android Studio版本为3.5. 配置NDK 下载NDK 一般在SDK下已经有自带 ...

  2. android studio ndk 开发入门

    ndk 开发没什么神秘的ndk 说白了就是一个交叉编译的工具链,用它来生成各个CPU架构下的静态或动态链接库,linux 下就是 .a 和 .so 文件.原理就是 java 通过 JNI 和 C.C+ ...

  3. Android Studio NDK开发环境搭建

    一.   下载安装Android studio 和 NDK 二.   在Android studio中配置NDK(和SDK配置一样) 三.   用Android studio建立一个工程,打开proj ...

  4. Android Studio NDK开发-JNI调用Java方法

    相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需 ...

  5. Android Studio NDK开发入门

    从Android Studio 1.3 Beta1开始,就支持了NDK,我目前使用的版本是1.5.首先强调几点. 1.必须安装NDK并配置好环境变量(和配置JDK环境变量如出一辙:新建NDK_HOME ...

  6. Android Studio NDK开发浅谈

    环境: Android Studio 1.1.0 NDK-r10d 1.新建项目--->包名:com.mxl.az.ndk 新建包含native方法的类:JniOperation.class p ...

  7. Android Studio && NDK开发

    Android Studio下载安装网址:http://www.android-studio.org/index.php/download/hisversion 在下载界面可以查看安装包内是否包含SD ...

  8. Android Studio NDK 开发 问题记录

    Android NDK 开发 问题解决 编译:找不到gles3库 使用旧的编译方式,写Android.mk 进行编译.报错如下 gles3/gl3.h no such file or director ...

  9. NDK开发-Android Studio+gradle-experimental开发ndk

    在最新的Android Studio2.2的preview版中,增加全新的ndk支持,使用了新的gradle,以及DSL语言. 新的NDK需要使用新的Gradle插件和新的Android插件来支持! ...

随机推荐

  1. (原) ubuntu下用pycharm2016.1专业版配docker编译环境(docker Interpreter)

    一:先创建docker-machine 先创建docker machine.我主机上的虚拟机是virtualbox.$ docker-machine create --driver virtualbo ...

  2. python 三元表达式 if for 构建List 进阶用法

    1.简单的for...[if]...语句 Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省 ...

  3. Lua语法基础(3)--迭代器和泛型for

    迭代器和闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功 ...

  4. 非网络引用element-ui css导致图标无法正常显示的解决办法

    https://blog.csdn.net/m0_37893932/article/details/79460652 ***************************************** ...

  5. 【神经网络】LSTM 网络

      Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息.LSTM 由Hochreiter & Schmidhuber (199 ...

  6. Python3求栈最小元素

    [本文出自天外归云的博客园] 思路:入栈时靠辅助栈记住主栈元素中最小的,出栈时一直pop主栈元素直到辅助栈栈顶元素出现. 代码如下(定义栈.超级栈): class Stack(object): def ...

  7. WideCharToMultiByte和MultiByteToWideChar函数的用法(转)

    转自:http://www.cnblogs.com/gakusei/articles/1585211.html 为了支持Unicode编码,需要多字节与宽字节之间的相互转换.这两个系统函数在使用时需要 ...

  8. Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)

    我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...

  9. junit import org.junit.Test 报错

    由于用的是父-子项目 在自项目中各种改都不行,还是报错,而且子项目中明明已经导入了还在报错,后面发现是父项目中的scope是test 注释掉就好了

  10. git拉取远程分支

    查看本地所有分支列表: git branch -a 查看远程所有分支列表: git branch -r 拉取远程分支(使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checko ...