本文目录

  一、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

Android NDK(一) ndk-build构建工具进行NDK开发的更多相关文章

  1. Android NDK开发 Android Studio使用新的Gradle构建工具配置NDK环境(一)

    本文主要讲述了如何如何在Android Studio使用新的Gradle构建工具配置NDK环境,现在把相关的步骤整理出来分享给Android程序员兄弟们,希望给他们在配置NDK环境时带来帮助. 从An ...

  2. Android NDK(二) CMake构建工具进行NDK开发

    本文目录 一Androidstudio中需要的插件 二项目配置 ①build.gardle配置 ②CMakeLists.txt ③Android和Cpp的代码 ④so文件生成 ⑤so文件的位置 一.A ...

  3. [Android] 基于 Linux 命令行构建 Android 应用(七):自动化构建

    本章将演示如何基于 Linux 命令行构建 Android 应用,在开始本章之前,希望你已经阅读之前几章内容. 本文环境为 RHEL Sandiego 32-bits,要基于 Linux CLI 构建 ...

  4. Android Gradle 构建工具(Android Gradle Build Tools)是什么?

    转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...

  5. 一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5

    译者地址:[翻]一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5 原文:First Look at New Android Gradle Build To ...

  6. AS Gradle构建工具与Android plugin插件【大全】

    Android plugin version 与 gradle version 的关系 Gradle是一种构建工具,它通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对 ...

  7. [原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)

    链接地址:http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8阅读578 评论0 前言:cocos2dx作为一个开源的移动2D游戏框 ...

  8. Build Tool(构建工具)

    what: 构建工具能够帮助你创建一个可重复的.可靠的.携带的且不需要手动干预的构建.构建工具是一个可编程的工具,它能够让你以可执行和有序的任务来表达自动化需求.假设你想要编译源代码,将生成的clas ...

  9. Android构建工具--AAPT2源码解析(一)

    一.什么是AAPT2 在Android开发过程中,我们通过Gradle命令,启动一个构建任务,最终会生成构建产物"APK"文件.常规APK的构建流程如下: (引用自Google官方 ...

随机推荐

  1. CF - 1131 C Birthday

    题目传送门 显然可以发现: 我们sort之后,把奇数位的先按顺序拿出来,然后再把偶数位的按照反顺序拿出来,这样就可以保证答案最小. 代码: /* code by: zstu wxk time: 201 ...

  2. 51nod 1020 逆序排列(dp,递推)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1020 题意:是中文题. 题解:很显然要设dp[i][j]表示 ...

  3. JSON和Map,List,String互相转换

    1)Map 和 JSON 互相转换 Map 转成 JSON Map<String, List> map = new HashMap<>(); map.put("xAx ...

  4. centos 6.5 搭建DHCP实验

    搭建DHCP服务 安装DHCP服务 挂载光盘:mount /dev/cdrom /qswz 从光盘的安装包中安装DHCP rpm -ivh dhcp-4.1.1-38.P1.el6.centos.i6 ...

  5. 【MySQL】为什么SQL会这么慢

    建表 CREATE TABLE `ts_ab` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` varchar(20) CHARACTER ...

  6. spring boot项目后台运行

    spring boot项目后台运行 Spring Boot应用的几种运行方式: (1)运行Spring Boot的应用主类 (2)使用Maven的Spring Boot插件mvn spring-boo ...

  7. 使用maven的profile构建不同环境配置

    基本概念说明(resources.filter和profile): 1.profiles定义了各个环境的变量id 2.filters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profil ...

  8. Jsp学习笔记(4)——分页查询

    核心sql i是第几页,itemNum是每页显示的数据条数 select * from ( select e.*,rownum rn from ( select * from employee whe ...

  9. 第二次作业:使用Packet Tracer分析应用层协议(DNS、FTP、DHCP、SMTP、POP3)

    0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序. 2 实验内容 ...

  10. 【数据结构】Hash表

    [数据结构]Hash表 Hash表也叫散列表,是一种线性数据结构.在一般情况下,可以用o(1)的时间复杂度进行数据的增删改查.在Java开发语言中,HashMap的底层就是一个散列表. 1. 什么是H ...