Android Studio NDK编程-环境搭建及Hello!
一,下载 安装android-ndk开发包
NDK各个版本链接
二,新建项目NDKDemo,选择空Activity就可以;
(注:Android studio 2.2,可通过SDK Tools 添加LLDB,CMake,更方便的开发jni程序了)
三,按F12,配置项目NDK路径:

四,在MainActivity中添加如下代码:
static {
System.loadLibrary("MyJni");//导入生成的链接库文件
}
public native String getStringFromNative();//本地方法
public native String getString_From_c();

红色代码是本地方法!不知是否Android studio对ndk支持不太好所致,但不影响开发JNI程序!
在最新的Android Studio2.2 能很好的支持ndk了,不再出现红色!
五,Make Project一下,生成class文件!

使用Android studio2.2 就是这锤子图标!
六,通过class文件生成头文件!

(1)通过Terminal 中的命令来生成:
输入javah -d jni -classpath ../../build/intermediates/classes/debug com.it5.ndkdemo
(注意前后有英文的;号隔开的哈)!
注:../后面的就是class文件的目录!!

大家看了,是不是有点晕圈啊,虽然可以复制路径,但如果每次都这样就太不方便了!!
另可以在工具中配置命令的快捷键,来完成!
(2)Settings -> External tools中配置javah,ndk-build快捷方式!!
javah(生成头文件),ndk-build(编译)
打开External Tools 点加号添加javah:如下图:

参数配置:
Program: $JDKPath$\bin\javah.exe
Parameters: -classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$ $FileClass$
Working directory: $ModuleFileDir$\src\main\Java
Parameters的另外一种写法 -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
按上图依次填好,就好了!!
添加ndk-build配置如下:
Program: D:\Android_NDK\android-ndk-r11b\ndk-build.cmd
Working directory: $ProjectFileDir$\app\src\main
这样配置后,以后只要把需要运行的类上右键 --> External Tools-->javah/ndk-build!
就可完成头文件及编译的工作!
哈哈!! 爽歪歪!
(3)用命令生成头文件!!
选中需要执行javah命令的类,然后右击,按照下图选择命令即可。
注:生成 .h头文件,所以一般是在含有 native字样的本地方法的类!
本地方法写在MainActivity.java 中,就右击该类生成!

这样就会在main文件下创建jni文件夹并生成 .h头文件成功!

现在ok了,快捷就是爽啊!!!
接下来,就是编写C/C++的代码了!
七,在jni目录编写C代码!

注:
项目结构切换成 Android状态时,jni文件夹显示成 cpp名字!
当切换成project时就显示成jni文件夹!!
如下图:

添加如下代码:

八,Gradle文件添加配置!
(1)在module中的build.gradle中defaultConfig{}标志里添加!
ndk{
moduleName "MyJni"
ldLibs "log"
abiFilters "armeabi","armeabi-v7a","x86"
}
编译会根据配置生成不同的目录来存放 .so文件!
参数配置:
在defaultConfig中添加一个ndk{}
ndk{}可添加的属性如下:
moduleName "xxx" : 编译后so库的名字
ldLibs "xxx" "xxx" : 连接的库,可以有多个
abiFilters "xxx" "xxx" :
so库运行的cpu架构,有armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64这些,常用的是armeabi和armeabi-v7a
stl "xxx" : C++ runtime support library,共有九种
cFlags "xxx" "xxx" : 编译选项
例如 :
要使工具自动识别C++提示只要如下语句:
stl "gnustl_shared"
cFlags "-IE:/Android_NDK/android-ndk-r11b/sources/cxx-stl/gnu-libstdc++/4.9/include"

注:Android.mk文件 Android Studio会自动生成!与Eclipse不同!
如图:

注:
把Android.mk文件拷贝到 main/jni文件夹下
右键--->External Tools -->ndk-build 生成 .so文件!!
如做如下配置 .so 就会生成在指定的目录下:
sourceSets.main{ jni.srcDirs = [] jniLibs.srcDir "src/main/libs" }
(2)在项目的gradle.properties 文件中添加
android.useDeprecatedNdk=true
如图:

最后,运行成功OK!

这是之前的配置方法,有个不方便的地方就是无法DEBUG jni,要另添加插件,对写C/C++代码提示功能也不尽人意!
不过本篇是以Android Studio 2.2来配置滴!!在2.2版本,对NDK支持也越来越完善了,可以在
SDK Tool 中添加 CMake,LLDB来创建ndk项目并支持调试,自动编译,对C/C++的代码提示功能也增强了!
Android Studio NDK编程-环境搭建及Hello!的更多相关文章
- Android Studio NDK编程-环境搭建及Hello!
一,下载 安装android-ndk开发包 NDK各个版本链接二,新建项目NDKDemo,选择空Activity就可以:(注:Android studio 2.2,可通过SDK Tools 添加LLD ...
- Android Studio NDK开发环境搭建
一. 下载安装Android studio 和 NDK 二. 在Android studio中配置NDK(和SDK配置一样) 三. 用Android studio建立一个工程,打开proj ...
- Android Studio NDK编程初探
继上一篇学习了如何使用NDK编译FFMPEG后,接下来就是要学习如何在Android Studio中使用了. 经过参考和一系列的摸索,记录下具体步骤. 创建C++ Support的Android St ...
- Android下NDK开发环境搭建
Android下NDK开发环境搭建 1. AndroidNDK安装与配置 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...
- android Jni NDK开发环境搭建及其简单实例的编写
android Jni NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...
- android studio 安装与环境搭建
转摘自:http://blog.csdn.net/zhanghefu/article/details/9286123 第一章 andriod studio 安装与环境搭建 一.Android St ...
- Android Studio Ndk 编程
如今开发Android程序基本都已经从Eclipse转到了Android Studio了, 近期项目需求, 须要用到ndk编程, 于是就折腾了一下. 开发环境 Android Studio 1.5.1 ...
- Android Studio for windows环境搭建
Android Studio环境搭建 个人博客 欢迎大家多多关注该独立博客: csdn博客 一直想把自己的经验分享出来,记得上次写博客还是ok6410的笔记,感觉时代久远啊.记得那个时候我还一心 ...
- Android Studio NDK环境配置
本文参考:Android Studio NDK环境配置及JNI使用方法:http://blog.csdn.net/tongseng/article/details/53005123 并添加自己的实践: ...
随机推荐
- SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search
1. Ensure your site or shared folder in one Content Source. 2. Add file types. 3. The second step in ...
- Android 手机卫士--设置界面&功能列表界面跳转逻辑处理
在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...
- 如何自动化一键部署PHP项目
1.技能需求 完成自动化一键部署PHP需要:PHP(略懂),Shell(略懂),git(略懂) 2.最终效果 输入密码,回车,5~20秒后(一般一天一次持续交付,部署的代码量和sql脚本都不会很大) ...
- [转]HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
- 125个工具与技术(PMBOK2008)
名称 定义 适用场景 适用过程 专家判断 对某方面擅长的人就是专家,找专家协助就是专家判断,专家可能是顾问.干系人.PMO.团队成员 制定项目章程.制定项目管理计划.指导与管理项目执行.监控项目工作. ...
- SQL Server删除distribution数据库
在数据库服务器删除复制(发布订阅)后,如何删除掉数据库distribution呢?如果你通过SSMS工具去删除数据库distribution,你会发现根本没有删除选项. 下面介绍一下删除distrib ...
- Database 'xxx' cannot be upgraded because it is read-only or has read-only file Make the database or files writeable, and rerun recovery.
在分离数据库DatabaseName(暂且用DatabaseName代替该数据库名)后,我将其数据文件以及日志文件移动到新增的磁盘上.然后附加该数据库,结果报如下错误: Database 'Dat ...
- java数组对象的浅层复制与深层复制
实际上,java中数组对象的浅层复制只是复制了对象的引用(参考),而深层复制的才是对象所代表的值.
- WordPress目录文件结构详细说明
根目录 |-wp-admin | |-css | |-images | |-includes | |-js | |-maint | |-network | |-user |-wp-content | ...
- java基础算法之选择排序
选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. ...