本文目录

  一、androidstudio环境

  二、快捷键配置

  三、新建项目

  四、NDK开发

  五、so文件编译

一、 androidstudio的环境

在SDK Tools中安装NDK开发环境(File > Settings > Appearance & Behavior > System Settings > Android SDK > SDK Tools):  NDK

        

二、快捷键的配置

打开File > Settings > Tools > External Tools选项,点击【+】按钮添加生成jni头文件以及ndk-build命令的快捷工具:

  ①生成头文件  

  Name:javah-jni

    工具名称

  Program:$JDKPath$/bin/javah

    javah所在的路径,$JDKPath$代表在环境变量中配置的JDK路径。

  Parameters:-jni -encoding UTF-8 -d $ModuleFileDir$\src\main\jni $FileClass$

    命令参数:

    -jni代表生成JNI样式的标头文件,文件名为当前包名+类名($FileClass$)

    •-encoding代表编码格式为UTF-8

    •-d代表指定头文件的输出路径为jni目录($ModuleFileDir$\src\main\jni )

  Working directory:$ModuleFileDir$\src\main\java

    工作目录,$ModuleFileDir$为当前module的路径。

  ②NDK构建

  ndk-build的配置和javah-jni类似,其中C:\Tools\NDK\android-ndk-r14b\ndk-build.cmd为ndk-build构建工具的路径,需要按照实际NDK安装路径进行修改。

③如何调用

右击项目选择External Tools:

三、新建一个普通的项目   

 ①在main目录下新建jni目录,在此目录下编写原生代码:
   ②在main目录下新建jniLibs目录,此目录为Android Stuido加载so文件的默认目录,看下项目结构

          

四、NDK开发

①MainActivity

public class MainActivity extends AppCompatActivity {

    // 加载native-lib,不加lib前缀
static {
System.loadLibrary("native-lib");
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 将获取的字符串显示在TextView上
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
} /**
* native-lib中的原生方法
*/
public native String stringFromJNI();
}

②对着MainActivity的类名右击鼠标,选择External Tools > javah-jni,控制台执行完命令后,会在jni目录生成一个头文件:
 ③jni目录中新建cpp类native-lib.cpp,引用上文中生成的头文件,返回一个字符串给Java层,
 ④接着在jni目录下创建Android.mk和Application.mk配置文件

Android.mk

# 当前路径
LOCAL_PATH := $(call my-dir) # 清除LOCAL_XXX变量
include $(CLEAR_VARS) # 原生库名称
LOCAL_MODULE := native-lib # 原生代码文件
LOCAL_SRC_FILES =: native-lib.cpp # 编译动态库
include $(BUILD_SHARED_LIBRARY)

Application.mk

# 原生库名称
APP_MODULES := native-lib # 指定机器指令集
APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64

⑤在app的build.gradle文件中关联Android.mk(相当于执行了【Link C++ Project with Gradle】)

android {
... externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}

五、so文件编译

①对着jni目录右击鼠标,选择External Tools > ndk-build,会在main目录下生成libs和obj目录,编译出的so文件就在libs目录下

②将so文件拷贝到jniLibs目录下就可以正常使用了,也可以在app的build.gradle文件中设置so文件的路径。

注意:编译出的so文件就相当于java中的jar包,上文中的jni就相当于library,两者不要重复使用。

原文链接:https://blog.csdn.net/kong_gu_you_lan/article/details/79146817

最新文章

  1. 学点HTTP知识
  2. SQLServer 2012重启服务后,自增1的标识列一次增长了1000左右
  3. 開啟apache的日誌功能,但是不記錄.js;.css;.jpg;.ico;.png等訪問記錄
  4. MVC 服务器文件下载
  5. 20141030--SQL2008常用命令-1
  6. Retrofit 2.0 throwing @Field parameters can only be used with form encoding
  7. (一)Redis初学教程之安装篇
  8. 将数据库二进制图片导出显示到EPPlus Excel2007中
  9. android——字体颜色跟随状态改变
  10. Android UI ActionBar功能-ActionBarProvider的使用
  11. servlet请求转发与重定向的差别------用生活实例来形象说明两者的差别
  12. live555_RTSP连接建立以及请求消息处理过程
  13. LibreOJ NOI Round #1 Day 1 B. 失控的未来交通工具
  14. PS制作漂亮紫色霓虹灯光文字
  15. CSS3动画属性:转换(transition)
  16. DJango 基础(6)
  17. 小姐姐手把手教你JS数组中的对象去重
  18. jsTree动态加载数据
  19. HashMap的底层实现原理
  20. 从VMware虚拟机安装到hadoop集群环境配置详细说明(第一期)

热门文章

  1. hdu 5887 Herbs Gathering (dfs+剪枝 or 超大01背包)
  2. hdu4565 So Easy!(矩阵快速幂)
  3. 入门MySQL——备份与恢复
  4. 题解 UVA11000 【Bee】
  5. 【JavaWeb】Servlet3.0中注解驱动开发
  6. c语言实现双色球和大乐透
  7. Kafka源码分析及图解原理之Broker端
  8. .Net基础篇_学习笔记_第七天_随机数的产生
  9. 记一次Mysql数据库Kill完之后启动不起来的解决方案
  10. java使用FileSystem上传文件到hadoop文件系统