在我写这篇文章的时候,Android Studio已经是2.3版本了,已经集成CMake 编译工具,
用户只需在 新建项目的时候,添加选项(Include C++ support),Android Studio就会自动
帮你部署好相应的NDK环境。但我还是想尝试使用 Android.mk 配置文件方式来实现NDK开发,
了解其配置的原理,然后再使用 CMake 来部署,这样能了解两者间的区别。后续的文章就会写
到用CMake来部署NDK环境。
 
     假设你已经安装好了 Android Studio 与NDK 环境。
建议将ndk-build所在目录加入PATH环境变量,以便后续调试。
1、打开 File => Project Structure 如下:
 
如果选框中为空,说明你没有配置好NDK环境。
 
2、copy 路径, 然后打开如下 windows 系统下的环境变量
 
在 Path 变量里添加你的 NDK路径,即上一步copy的内容,记住在路径前添加 ; 分号。
确定之后,就在Windows 命令窗口 输入 ndk-build,得到如下图,说明你配置成功了。
 
下面我们来新建一个Android项目,实现一个简单的NDK方法。
1、创建一个NDKUtils.Java类, 新建一个 native 方法,
public native String invokeCmethod();
 
然后在该类 添加如下代码,即载入库的含义:
     static {
          System.loadLibrary("NDKUtils");//导入生成的链接库文件
      }
 
2、点击 菜单 Build =>Make Project,就会编译项目,然后在
你的项目跟路径 app\build\intermediates\classes\debug\com\magicing\eigenndk
可以看到 NDKUtils.class 文件(com\magicing\eigenndk 是包名,对应你自己的包名)
 
3、进入Android Studio命令行页面:
 
如果你没有这个选项,则你从 View菜单栏里 Tool Windows => Terminal 调出该页面。
 
输入如下命令:
      cd app/src/main   // 进入该路径
      然后执行下面编译命令
      javah -d jni -classpath F:\AndroidSDK\platforms\android- 23\android.jar;..\..\build\intermediates\classes\debug com.magicing.ndktest2.NDKUtils
 
解释(根据自身的情况来设置):
    F:\AndroidSDK\platforms\android-23\android.jar;   //是你的SDK路径,
    ..\..\build\intermediates\classes\debug                  //相对路径,都一样
    com.magicing.ndktest2.NDKUtils                          // NDKUtils 的命名空间
 
4、当上述的命令执行成功后,在app/src/main 多了一个 jni 文件夹,里面有一个
    com_magicing_eigenndk_NDKUtils.h 文件。在该路径下copy 一个相同名,后缀
    为 .c 的文件 com_magicing_eigenndk_NDKUtils.c 。然后该文件就是C 语言的实现文件。
 
    把如下方法调整一下(完善参数命名,且添加一个大括号),得到如下:
/*
* Class: com_magicing_eigenndk_NDKUtils
* Method: invokeCmethod
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_magicing_eigenndk_NDKUtils_invokeCmethod
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"NDK 获取Native 字符串");
}
 
5、在jni 目录下创建 Android.mk 配置文件,内容如下:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDKUtils
LOCAL_SRC_FILES := com_magicing_eigenndk_NDKUtils.c
include $(BUILD_SHARED_LIBRARY)
 
 
6、在jni 目录下创建 Application.mk 配置文件,内容如下:
 
APP_PLATFORM := android-23
APP_ABI := armeabi
 
 
7、然后继续在命令行端口执行 ndk-build 命令,得到如下:
 
该命令是编译C文件,然后生成 .so 文件,生成在 app\src\main\libs 目录下。
ndk-build 还有很多参数,大家可以去查询一下其它资料,如果有时间,我后续篇幅详细讲一下。
 
8、配置根目录下的 build.gradle 文件
 
主要添加如下代码:
    sourceSets{
        main{
               jni.srcDirs = [] // disable automatic ndk-build call, which ignore our Android.mk
               jniLibs.srcDir 'src/main/libs'
              }
     }
 
这样, native invokeCmethod 方法算是衔接好了,只有在MainActivity 上实例化这个类,然后
调用 这个方法,就能输出相应的字符串,这样就简单的实现NDK功能。
 
项目的目录大概如下:
 

NDK 开发实例一(Android.mk环境配置下)的更多相关文章

  1. 01 android ndk入门实例之android.mk编译

    前言 1 环境 android studio2.3 , window系统 2 ndk https://dl.google.com/android/repository/android-ndk-r16- ...

  2. NDK 开发实例二(添加 Eigen库)

    上一篇,我已经阐述了如何创建一个简单的NDK实例: NDK 开发实例一(Android.mk环境配置下) 在上一篇的基础上,我们来添加Eigen库,然后做一个简单实例. Eigen是一个高层次的C + ...

  3. 安卓app开发-01-开发工具及环境配置

    安卓app开发-01-开发工具及环境配置 请大家根据推荐指数和自己的意愿选择 使用 Android Studio 1.可以使用 Android Studio 下载地址:http://www.andro ...

  4. windows下JDK环境配置与Android SDK环境配置

    一.JDK环境配置1.配置变量名:JAVA_HOME变量值:jdk安装的绝对路径. 变量名:Path(在系统变量中找到并选中Path点击下面的编辑按钮,不要删除原本变量值中的任何一个字母,在这个变量值 ...

  5. 第一篇 Windows 8 开发Windows Metro style app环境配置

    半   饱问 题 到 我 这 里 为 止! 第一篇 Windows 8 开发Windows Metro style app环境配置 2012-09-24 08:24 by 半饱, 1289 阅读, 3 ...

  6. Android编译环境配置

    Android编译环境配置 网上关于Android编译环境配置的整理资料有不少,经整理亲测后,希望能给需要的亲们提供帮助. 主要分为四步: 1.安装JDK(Java Standard Edition ...

  7. Android的NDK开发(2)————利用Android NDK编写一个简单的HelloWorld

    1.Android NDK简介 NDK全称为native development kit本地语言(C&C++)开发包.而对应的是经常接触的Android-SDK,(software devel ...

  8. android studio 环境配置

    遇到哪些坑: Gradle:configure project 卡死在此处 Haxm is not installed hax is not working and emulator runs in ...

  9. Android ec环境配置

    ec环境配置 1.0概述 鉴于很多同事,或者新从事android开发,虽然会做android的开发,但是会遇见一些最基本的环境搭建问题,本文仅作为(win7 64位系统)eclipse中集成andro ...

随机推荐

  1. centos 重启日志服务

    因为/var/log/message日志太多了,遂手贱删掉了这个文件,新建messages,发现没有日志写入 正确清空日志的方法 cat /dev/null > /var/log/boot.lo ...

  2. float导致出现大面积空白

    float导致出现大面积空白,解决方法: *{ padding: 0; margin: 0; overflow:hidden; }

  3. VS2012 安装番茄插件

    1.visual assist x 1929_大番茄.rar 下载地址: http://pan.baidu.com/s/1qXOUuJE 网盘提取密码: 3mka 文件解压密码: eg5p 2.安装完 ...

  4. php 设置中文 cookie, js获取

    参考链接:http://www.nowamagic.net/librarys/veda/detail/1271 http://www.ruanyifeng.com/blog/2008/06/base6 ...

  5. 【BARTS计划】【Share_Week1】社交产品思考

    Share:每周分享篇有观点和思考的技术文章   社交梦是每个互联网大厂都在做的,好像大家都默认了一种说法:没有社交功能的产品是不完整的,不做社交产品的公司是缺少战略眼光的.但就目前来看,微信的社交霸 ...

  6. SpringMVC使用Hession发布远程服务

    (1)三个项目,Api(存放提供者和消费者共有的xx,例如实体类以及服务接口等等).Service(服务提供者).Provider(服务消费者) Api部分代码 package cn.coreqi.e ...

  7. 【vim】按时间回退文本 :earlier 1m

    Vim 会记录文件的更改,你很容易可以回退到之前某个时间.该命令是相当直观的.比如: :earlier 1m 会把文件回退到 1 分钟以前的状态. 注意,你可以使用下面的命令进行相反的转换: :lat ...

  8. [转]Linux下的链接脚本基础

    [转]http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml 1. 前言 (1)每一个链接过程都由链接脚本(linke ...

  9. Github简介

    先附上下载地址 http://windows.github.com/ git-scm.com是版本控制软件Git的官方网站. Git和GitHub的区别 Git是一个分布式的版本控制系统,与SVN类似 ...

  10. SharePoint 2010:搜索服务当前处于脱机状态

    错误 搜索服务当前处于脱机状态.请访问 SharePoint 管理中心中的"服务器上的服务"页,以验证是否启用了该服务.这也可能是由于正在移动索引器所致.   正在配置网站集搜索关 ...