本文目录

  一、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. 牛课练习赛34 Flittle w and Discretization 主席树维护Mex

    ittle w and Discretization 主席树维护Mex. 每个右端点 r 维护出一棵 在[1, r ] 区间中 其他所有的 值离这个 r 最近的的位置是多少. 然后询问区间[L,R]的 ...

  2. Toad客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时

    Oracle 客户端连接Oracle数据库报错   ORA-12170:TNS:连接超时  排错步骤: 1. 查看网络是否畅通:  打开cmd,ping数据库IP 2. 查看端口是否畅通: 打开cmd ...

  3. SpringCloud 学习(二)-2 :Securing The Eureka Server

    由于工作等种种原因未能连续进行学习,现在继续学习微服务,不过是新建的demo,springcloud版本用的是Finchley.SR2. 之前用简单demo实现了注册中心,现在来对注册中心加安全验证: ...

  4. 归并排序、jensen不等式、非线性、深度学习

    前言 在此记录一些不太成熟的思考,希望对各位看官有所启发. 从题目可以看出来这篇文章的主题很杂,这篇文章中我主要讨论的是深度学习为什么要"深"这个问题.先给出结论吧:"深 ...

  5. IOCAutofac与ORMEntityFramwork的联系--单例模式

    在你阅读之前默认你已经理解了IOC.DI.ORM以及autofac和EF的使用 在我最近写项目的时候我在单步调试时偶然发现的一个问题 先说明我的项目使用.NET MVC 三层架构,运用IOC Auto ...

  6. 警告:stream not available

    1.修改mybatis.org//DTD Config 3.0//EN更改为mybatis.org//DTD//EN 2.将url换成http://mybatis.org/dtd/mybatis-3- ...

  7. Hibernate 框架简单解说

  8. Java第三次作业第二题

    2. [请复制本程序,作为java程序代码,进行编译,补充填写缺失代码部分,并实现题目要求功能,从而获得空白填写所需的内容.] 定义3个线程,模拟红绿灯的效果 一个线程控制画一个实心红圆 一个线程控制 ...

  9. charles DNS欺骗

    本文参考:charles DNS欺骗 DNS欺骗/DNS Spoofing 功能:通过将您自己的主机名指定给远程地址映射来欺骗DNS查找 一般的开发流程中,在上线之前都需要在测试环境中先行进行验证,而 ...

  10. 自定义View入门-绘制基础(1)

    ### 前言 说道自定义View,我们一定会想到,自定义View的绘制流程 - 测量阶段(measure) - 布局阶段(layout) - 绘制阶段(draw) 我们看到的一些炫酷的view效果,都 ...