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 并添加自己的实践: ...
随机推荐
- Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法
➠更多技术干货请戳:听云博客 如下是我工作中的记录,介绍的是linux系统下NoSQL:MongoDB和Redis的安装过程和遇到的问题以及解决办法: 需要的朋友可以按照如下步骤进行安装,可以快速安装 ...
- AppDelegate动态加载StoryBoard
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- iOS 学习 - 18.TextField 自定义菜单事件,复制和微信分享
菜单事件包括,剪切.拷贝.全选.分享...,此 demo 只有 copy.share 1.定义 field 继承与 UITextField - (BOOL)canPerformAction:(SEL) ...
- ios webview自适应实际内容高度4种方法
有的时候会碰见类似的苦逼需求, webview自适应实际内容高度 下面有四种方法供使用 方法1:获取webview中scrovllview的contentsize进行设置 1 2 3 4 5 6 ...
- Linux-1:安装&忘记密码&CRT连接centos 6.5
我是在虚拟机VM安装的centos 6.5 一.Linux安装 Ctrl + Alt:鼠标退出LINUX界面 安装我是参考,当然也可以根据网上教程安装:http://oldboy.blog.51cto ...
- JS/JQuery针对不同类型元素的操作(radio、select、checkbox)
一.select下拉框 I:javascript方法 1:获取选中的值 F1: var myselect=document.getElementById("test");或者 ...
- JVM之PC寄存器(Program Counter Register)
基本特性: 当前线程执行的字节码的行号指示器. Java虚拟机支持多个线程同时执行,每一个线程都有自己的pc寄存器. 任意时刻,一个线程都只会执行一个方法的代码,称为该线程的当前方法,对于非nativ ...
- linux下使用denyhosts防止ssh暴力破解
1.DenyHosts介绍 DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.de ...
- hortonworks2.5.3 install step log
1.创建本地YUM源,下载TAR.GZ HDP,HDP-UTILS,AMBARI介质安装HTTPD,在/VAR/WWW/HTML/下创建三个相应的目录,把以上解压的三个目录链接过来在三个目录中执行命令 ...
- linux 文件系统结构及命令
1.linux 文件系统结构 / 根目录 root |--mnt/ | |--sdcard/ 挂载点 | |--usb0 | |--cdrom |--home | |--soft01 <- 用 ...