Android Studio NDK 开发与调试(生成 .so 文件)

温馨提示:如果你的 Android Studio 版本在 3.0以上 , 建议你用 cMake /ndk-build 的新姿势进行 NDK 开发 : https://developer.android.google.cn/index.html

AS与genymotionh和虚拟机的具体配置见:http://blog.csdn.net/qq_22605739/article/details/46711213

(1). 环境搭建与基本配置

见我的博客http://blog.csdn.net/darlingqiang/article/details/79049638

俗话说 “工欲善其事,必先利其器” ;所以咱还是得先下载 ndk;
下载地址 :https://developer.android.com/ndk/downloads/index.html
File-->ProjectStructure

如果你已经下载,直接选择你 ndk 的位置;
如果没有下载,在红色框这个位置会有位置提示你下载,点击下载就行;
添加 ndk 后你会在 local.properties 这个文件看到(路径取决于你 ndk 的位置):
接着进行下一步:
在此处加上这句代码:android.useDeprecatedNdk=true    

(2).第二步. class文件的生成(java 代码与 c 代码编写)

按照图片中的指示找到对应的合适的位置建立Java类,首先新建个 java 类


public class JniTest{static {System.loadLibrary("jary");}public native String getString();
}

然后重新编译下你的 Project: Build-->Make Project(Ctrl+F9)
KEY ONE:重新编译之后就可以在对应的文件夹看到编译后的 JniTest.class
sun@sun:~/AS/JniTest/app/build/intermediates/classes/debug/com/sun/jnitest(根据具体情况调整)

(3)下一步来看怎么生成 .h 的文件

在 studio 打开 Terminal 命令行工具,打开步骤是 View-->Tool Windows-->Terminal (Alt+F12)

在命令行中先进入到工程的 main 目录下
输入命令:javah -d jni -classpath 自己编译后的 class 文件的绝对路径

 ndk {   moduleName "jary"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。    stl "stlport_static"    //打开.c 的 debug , 下面第 4 点会讲到}

KEY TWO 绝对路径:javah -d jni -classpath javah -d jni -classpath ~/AS/JniTest/app/build/intermediates/classes/debug +具体
注意 debug 后面是有个空格的,如图:

命令执行后会在 main 目录下(在哪个目录下执行就会在哪个目录下生成 .h 文件)自动生成 “jni” 文件夹,

同时生成一个 .h 的文件

这个 .h 文件可不做修改 ;默认就行
现在我们来写一个测试的 C 文件 jary.c 同 .h 文件一样放到 jni 文件夹下,代码如下:

// Created by sun on 18-1-14. // #include <jni.h> #include "JniTest.h"  JNIEXPORT jstring JNICALL Java_JniTest_getString (JNIEnv *env,jobject jobject1){ return (*env)->NewStringUTF(env,"Hello Jni !") }

依赖刚才生成的 .h 头文件 ; 方法名与 .h 里面方法名保持一致 ;
最后在 在app中的test中的 build.gradle里面的

defaultConfig 中添加如下代码


 ndk {   moduleName "jary"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。    stl "stlport_static"    //打开.c 的 debug , 下面第 4 点会讲到}

到这里,jni 调 C 就完成了,现在我们来测试一下,写个 TextView 显示一下调用的 C:


public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tvJni = (TextView) findViewById(R.id.tvJni);tvJni.setText(new JniTest().getString());
}
}

效果如下图 :

(4). 生成 .so 以及调用

编译后的 .so 文件如下图路径:

根据这个路径就可以找到指定输出的三种体系结构下的 .so 文件,然后把 .so 文件复制出来,如下图所示的放到 jniLibs 文件夹下

注意: 放到 jniLibs 文件夹下面,build.gradle 里面 不用配置

还有一种方式是将 .so 文件 放在 libs 文件夹下面,注意在 build.gradle 添加如下配置:

4. 关于ndk开发在 .c 文件里面的 debug

首先在 build.gradle 中添加如下代码 :


android {... ...defaultConfig {... ...ndk {   moduleName "jary"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。    stl "stlport_static"    //打开.c 的 debug (此句是打开的debug的关键)}}buildTypes {debug {    jniDebuggable true //此句不加在真机上 debug 不受影响,但是在虚拟机上不能 debug}}

配置后如下图 ,会出现一个 app-native,选择此项你就可以尽情的 debug 了

debug 如下图

NDK JNI Android Studio开发与调试DEMO(三)(生成 .so 文件)相关推荐

  1. Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)

    本文是以源码中development/tools/idegen/README作为指导文档,给出了使用Android Studio导入Android源码的方法步骤. 环境: Ubuntu 12.04,o ...

  2. 基于android studio开发多人电话语音视频会议入门实例demo含app下载链接

    目录 说明 视频演示 图文演示 android版本支持 相关下载 说明 这是一个相对完整的客户端+服务器端的项目,适合入门学习研究.包含android摄像头.麦克风使用权限的动态申请,控件的事件绑定, ...

  3. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )

    文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...

  4. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  5. Android Studio 开发(二)问题

    目录 一.Mac下de的java路径 二.android studio的编译命令 三.在cocos3.1.5中 android-studio中的build-cfg.json找不到了 四.导入第三方ja ...

  6. 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...

  7. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

  8. SuperMap iMobile+Android studio开发入门(二)——超图示例代码运行

    背景:这里运行的是"产品入门"的"基于Android studio开发移动GIS程序"的"开发三维移动GIS程序",本篇对超图帮助文档进行了 ...

  9. NDK 在 Android studio如何使用(Android studio NDK)

    其实这个东西入门的话.直接在官网查找demo再结合文档就能间接了解如何构建是最快捷的. 这里提供一下官网和demo的地址. 官网的NDK在Android studio的搭建:http://tools. ...

最新文章

  1. Hadoop 分布式环境搭建
  2. VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT
  3. How to remove the dotted border on Active link state---移除链接激活时出现的虚线
  4. C#中DictionaryTKey,TValue排序方式
  5. 【kruskal】【倍增】严格次小生成树(P4180)
  6. 我决定不能贱卖自己(2010年11月13日志)
  7. javascript操作listbox方法 【转】
  8. 关于电脑程序员职务 用英语怎么表达
  9. vue跨域/webpack跨域
  10. pandas操作手册
  11. 为什么要在信号线上串联一些小电阻
  12. 亚当·斯密 传奇一生
  13. 一张图回顾Hadoop十年 Hadoop老矣,尚能饭否
  14. H5页面(三)效果之实现图片360度旋转---------spritespin.js插件
  15. NeHe OpenGL教程 第七课:光照和键盘 代码
  16. java接口推送_推送API
  17. 走近“领域特定语言”
  18. Unity-ShaderGraph学习笔记第一步: 如何打开ShaderGraph 制作全息效果Shader
  19. MATLAB在线文档打不开,怎么解决
  20. EV1527离线语音控制器模块调试日志

热门文章

  1. mysql常用转换函数_MySQL中常用转换函数介绍
  2. vue weex 调用原生toast_vue-template-compiler 还能这么用
  3. android 8.0可以实现后台包活么,Android 8.0 应用保活实践 · Jaqen Ng
  4. Python-OpenCV运动物体检测
  5. 直方图(opencv)
  6. TensorFlow下的基础命令语句:数组、字典、判断、循环、与函数
  7. oracle 10.2 64位,Oracle 10.2.0.5 x64升级到11.2.0.3 x64
  8. vue里面嵌入sound music音乐播放
  9. Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)
  10. CentOS部署JAVA程序、安装Tomcat以及安装导入mysql文件的方法