(原)使用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)首先是这个命令执行的目录,必须为项目目录下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:     [email protected]

出自:http://www.cnblogs.com/lihaiping/p/5829264.html

时间: 2024-08-28 05:04:48

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

android studio NDK 开发初探

android studio NDK 开发初探 环境配置 1)下载ndk 2)在android studio中配置ndk 路径 3)配置gradle 在gradle.properties中加入 android.useDeprecatedNdk=true配置 开启ndk 在开发过程中我们有时还会用到c++中到stl库这时我们就需要在build.gradle 中加入 defaultConfig { ndk { moduleName "jnitest" stl "stlport_s

Android Studio NDK开发

整理完Eclipse的NDK开发,再整理下Android Studio的.. 一个比较不错的百度网盘: http://pan.baidu.com/share/home?uk=2383159761  经常更新最新的Android方面的开发包,可以到里面下载到ndk的包 创建一个Android的工程,放一个TextView用于显示文字,功能很简单,从native层获取字符串并显示到TextView上 然后编写相关代码: public class MainActivity extends AppCom

Android Studio NDK 开发配置

一:使用gradle experimental plugin 首先,我们不能用android studio默认的gradle插件,我们需要把android studio的插件改为gradle experimental plugin, 这个plugin是google开发的,网址在这里: http://tools.android.com/tech-docs/new-build-system/gradle-experimental Gradle experimental plugin是android 

Android Studio NDK开发浅谈

环境: Android Studio 1.1.0 NDK-r10d 1.新建项目--->包名:com.mxl.az.ndk 新建包含native方法的类:JniOperation.class public class JniOperation { public static native String getString(); public native int add(int a, int b); } 2.然后使用javah命令生成.h文件 打开“小黑框”,进入项目目录的.../app/bui

android studio ndk开发总结

1.path环境变量 2.android studio关联ndk local.properties   ndk.dir gradle.properties  android.useDeprecatedNdk=true//兼容老版本 3.build.gradle 配置 defaultConfig{ ndk{ moduleName "Hello" abiFilters ''armeabi","armeabi-v7a","x86" } } 4

Android Studio NDK开发环境搭建

一.   下载安装Android studio 和 NDK 二.   在Android studio中配置NDK(和SDK配置一样) 三.   用Android studio建立一个工程,打开project,建立一个调用C的类,然后在mian文件夹下建立一个jni文件夹. 四.   打开cmd ,输入cd 工程文件夹路径,如cd C:Users\CFF\Desktop\MyApplication\app\src\main\java,然后按回车. 五.   输入javah –jni +调用C的类路

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

相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需要先了解FindClass和GetMethodID了. FindClass和GetMethodID 在JNI中可以通过FindClass可以找到Java类,得到jclass,例如: jclass clz=(*env)->FindClass(env,"com/jjz/JniHandle"

Android Studio NDK及so文件开发

前言 什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU.平台.ABI等差异,开发人员只需要简单修改mk文件(指出"哪些文件需要编译"."编译特性要求"等),就可以创建出so. 为什么使用NDK? 1.代码的保护.由于apk的ja

Android之NDK开发

一篇文章: Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言.但这并不等同于“第三方应用只能使用Java”.在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可