ndk的环境配置 练习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ndk的环境配置 练习笔记相关的知识,希望对你有一定的参考价值。

android  c++开发环境主要由以下几个部分构成:
? Android 软件开发包(software Development Kit,SDK)
? Android 原生开发包(Native Development Kit,NDk)
? Android Studio 安卓集成开发工具,类似Eclipse ADT
? Java 开发包(Java Development Kit,JDK)

下面就循序渐进的讲解配置Android C++ 开发环境的步骤,Android开发工具可以在以下三种操作系统平台上运行
Microsoft Windows
Apple Mac OS
Linux
不同的操作系统之间的操作除了配置路劲不大一样,其他没多大区别。

1 配置好相关软件
按照现在的主流电脑配置,软件都尽量考虑采用64位的。
? Java JDK 8
? Android Studio

1.1 下载并安装JDK开发包
Android 开发工具要求必须安装JDK(Java Development Kit) 在安装 android studio 之前需要先安装java JDK 8。

Android studio 支持多种发行版本的JDK,例如:IBM JDK,Open JDK以及 Oracle JDK。因为Oracle 支持的平台较多,是开发者通常采用的版本。

(1)通过访问oracle官网的以下页面

http://www.oracle.com/technetwork/java/javase/downloads/index.html
技术分享
(2) 单击Java Platform (JDK)  的download 进入平台的安装包清单页面
(3)选中 Accept License Agreement 选项并下载 Windows x64安装包。

技术分享

 下载完成,双击安装向导首先安装JDK,然后安装JRE。在安装过程中,安装向导会让你指定目录以及要安装的组件。 安装过程中,使用notepad记录安装的路径,后面会用到。

技术分享

  程序接下来会停留在jre的安装界面上,同样的可以自己修改路径。 

安装完成后,通过运行窗口进入cmd命令控制界面,输入 java -version,如果已经配置到环境变量中,就可以看到版本的详细信息

技术分享

javah没有调用到,就需要用到上面记录的路径,在环境变量的path中配置。

1.2 安装Android studio
    Android Studio 是一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。  在国内,可以访问http://www.android-studio.org/网站下载。现在已经更新到3.0 版本,内置了kotlin支持。处于稳定考虑,还是暂时使用2.3版本。

   下载完成,双击打开,如果是第一次安装,就一直按照提示,在安装过程中,会顺便下载最新的sdk。
   如果本地已经有sdk了,那么可以切换路径。 

   1.2.1 sdk manger 下载工具

 ? The Android Native Development Kit (NDK):这套工具集允许您为 Android 使用 C 和 C++ 代码。
? CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
? LLDB:一种调试程序,Android Studio 使用它来调试原生代码  


在打开的项目中,从菜单栏选择Tools->Android->SDK Manager 打开
2 点击 SDK Tools标签
3 选中LLDB、CMake和NDK 旁的复选  
技术分享
完成这步,一些基本的配置就完成了。
  
   2 创建项目
  在应用开发中,Android studio有两种方式进行c++的开发。
?  采用和eclipse相同的方式,javah生成相应文件,编写编译脚本android.mk
?  采用android studio内置的cmake功能
  

创建两个实例作为参考,里面涉及到的语法暂不考虑,后面再来分类分析。


  2.1 使用传统方式创建的项目
创建一个正常的项目
(1)编写一个jni的java接口类,在内部声明native方法。

 

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

然后build project 生成中间文件。查看是否已经生成.class文件。 

重新编译之后就可以在对应的文件夹看到编译后的 JniTest.class在项目根目录\\app\\build\\intermediates\\classes\\debug\\包路径>

 在android studio打开terminal命令行工具,当前路径切换到main目录下,使用javah 生成c语言头文件,并将文件输出到jni文件夹中。

 

javah -d jni -classpath 项目根目录\\app\\build\\intermediates\\classes\\debug> 包路径.JniTest

这个 .h 文件可不做修改 ,默认就行。写一个测试的 C 文件nativelib.c 同 .h 文件一样放到 jni 文件夹下。

 

#include <jni.h>
#include "com_example_elvin_testjni_JniTest.h"

JNIEXPORT jstring JNICALL Java_com_example_elvin_testjni_JniTest_getString
        (JNIEnv *env, jobject job){
    return env->NewStringUTF("from jni");
}

 当然光些这些事编译不过的。

还需要在app路径下配置build

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

    }
}

重新编译就会在项目根目录\\app\\build\\intermediates\\ndk\\debug\\> 生成相应的 架包文件

技术分享

自动生成的目录和文件,实际上还需要将这些包移动到 jniLibs文件夹中,方便后续的c代码跟踪编译打断点:

技术分享

libs:包含指定的目标及体系结构的独立子目录,在打包过程中该目录被包含在apk文件中。

obj: 这是一个中间目录,编译源代码后所产生的目标文件都保存在该目录下。开发人员最好不要访问该目录。

最下面的Android.mk其实就是我们在用eclipse编译jni文件时的配置。这个文件就是之前根据build配置的信息系统生成的。

备注:
  可能会编译出现问题,添加一个空的c的语言文件。如果想避免这种情况,请将实现文件名字后缀设置为cpp。这样就可以很自然的编译通过。

  
  
 
  备注:
  javah   用法:
   javah [options] <classes>
   其中, [options] 包括:
    -o <file>                输出文件 (只能使用 -d 或 -o 之一)
    -d <dir>                 输出目录
    v  -verbose             启用详细输出
    -h  --help  -?           输出此消息
    -version                 输出版本信息
    -jni                     生成 JNI 样式的标头文件 (默认值)
    -force                   始终写入输出文件
    -classpath <path>        从中加载类的路径
    -cp <path>               从中加载类的路径
    -bootclasspath <path>    从中加载引导类的路径
    <classes> 是使用其全限定名称指定的

 

 

 

 











































































以上是关于ndk的环境配置 练习笔记的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

android -------- Eclipse下的NDK配置环境

eclipse里配置Android ndk环境,用eclipse编译.so文件

NDK笔记-在Android Studio中使用ndk-build

NDK笔记-在Android Studio中使用ndk-build(转)

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段