zoukankan      html  css  js  c++  java
  • androidjni 之 环境搭建

    一、NDK简介

    1、NDK 全称: Native Development Kit;

    为什么推出NDK? 首先 C和C++开发的程序其卓越性能不用提了,其次 C和C++被反编译的可能性降低了很多,要比JAVA安全保密多了,但也有缺点:比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug难度更大等。开发者需要自行斟酌使用。


    2.、ANDROID NDK 带来了什么

    a) 一套工具,基于本机编译的C和C++源代码库。

    b) 一种部署在ANDROID设备上,可以将so和java一起打包成APK的方法

    c) NDK集成了交叉编译器,并提供了相应的 mk 文件隔离 CPU 、平台、 ABI 等差异,开发人员只需要简单修改 mk 文件(指出“ 哪些文件需要编译 ” 、 “ 编译特性要求 ” 等),就可以创建出 so。


    二、搭建Android NDK环境 

    因为 NDK 要求是 linux 下 开发如果你 在windows下:你可以选择虚拟机VM,里面装一个 linux系统,可是如果你是在windows上成长起来的,还是选择cygwin,至少你不用来回切换窗口了。

    下载Android NDK,。下载后直接解压即可。鉴于都属于android 开发,所以最好把其放在android SDK的相同目录下,这样寻找Samples的时候会比较省事。

    NDK 编译需要用到Cygwin 中的make 和gcc


    三、部署并 运行hello-jni例子

    1、设置环境变量

    第一:首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:C:\cygwin\home\wh\.bash_profile

    注意:要第一次启动cygwin才会自动生成。


    第二: 打开.bash_profile文件,在最后面加入下面这两句话,保存后,重新启动Cygwin。

    ANDROID_NDK_ROOT=/cygdrive/<你的盘符>/<android ndk 目录>

    export ANDROID_NDK_ROOT

    例如:ANDROID_NDK_ROOT=/cygdrive/e/android/android-ndk-r4  (此处表示NDK安装目录),第二句话表示的是添加环境变量。再打开桌面图标Cygwin,在命令行输入:cd $ ANDROID_NDK_ROOT ,注意环境变量的大小写。回车后会定位至你的NDK安装目录。

    注意:这里如果是中文OS 使用记事本或者写字板打开编辑后,重新启动Cygwin 会报错。

    到此处整个windows下的NDK环境全部搭建完毕。


    编译 原生代码 有两种方法可选:

    方法一: 在命令行中用ndk-build命令编译原生码生成.so。

    1).进入要生成.so的工程目录,比如$ ANDROID_NDK_ROOT/samples/hello-jni,然后执行$ANDROID_NDK_ROOT/ndk-build

    安装好NDK之后,最好花上几分钟读一读/docs目录下文档。特别是要完整阅读OVERVIEW.TXT,读完以后你就可以明白NDK的初衷以及如何使用它了。

    比如:其中有说明: Previous releases required you to run the 'build/host-setup.sh' script to configure the NDK. However, this step has been removed in release 4 (a.k.a. r4).。 

    2).在任何地方,执行 $ANDROID_NDK_ROOT/ndk-build -C $ANDROID_NDK_ROOT/samples/hello-jni 如果成功的话,会生libs目录。libs/armeabi目录下有.so文件

    3)把samples/hello-jni的hello-jni目录工程拷贝到你的workspace目录下 (用SDK工具,以通常的方式编译应用,SDK的build工具会将.so打包进apk文件) 。


    方法二在Eclipse中配置参数编译原生码生成.so。

    1、创建工程,把android代码和、原生的c代码、还有编译 .so 的Andriod.mk 都写好,也就是 整个 工程 只差编译了,。

    2、 工程编译 工程目录如下图所


    右键 选择当前项目hellojni -> Build path ->  config build path -> Builders -> new选择program在新建Builder中进行如下配置

    注意:如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK,因为EC需要配置的builder,其实是执行Cygwin,然后传递ndk-build作为参数。在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译,而不需要使用Cygwin了。所以,windows和Linux上都可以类似的使用系统命令行直接进行NDK编译。

    既然NDKr7来了,那就不用做Cygwin的配置了。下面是使用NDKr7在windows下配置自动编译的builders的过程,对于Linux,只需要修改ndk-build.cmd为ndk-build即可了。

    下面是Main选项卡的配置


    Location为ndk-build.cmd的路径(PS:NDK的安装只需要解压到某一路径即可)。Working Directory,为当前的工程下。这里的${}的表达是使用了EC的环境变量,可以使用Variables...按钮找到一些EC的环境变量。其他的不用配置。

    对于Linux上的配置,和这里的配置一样,只是把Location的地址改为ndk-build即可。


    下面是Refresh选项卡和Build Options选项卡的配置:



    其中,在配置Build Options的时候,点击Specify Resources按钮,选中工程下的jni文件夹如下:



    EC就能自动调用NDK脚本编译jni下的C/C++代码了


    出来 这个 结果 说明 刚才的配置 正确,并且 已经 自动 把 工程的 原生代码 编译了,并且在 工程 下 ,会生成 libs目录。libs/armeabi目录下有.so文件。


    总结:

    1、用NDK编译,把编译好的libs(已经编译好了.so),直接拷贝到 eclipse的工程目录下。

    2、先在 eclipse里把 整个 android工程建好,并且把 代码写好,然后 配置 以上的自动编译,注意:要把原生代码 和 Android.mk都写好,如下:

    -----------------------------------------

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE    := hello-jni #需要修改
    LOCAL_SRC_FILES := hello-jni.c //需要修改

    include $(BUILD_SHARED_LIBRARY)

    -----------------------------------------------------








  • 相关阅读:
    PTA(Advanced Level)1037.Magic Coupon
    PTA(Advanced Level)1033.To Fill or Not to Fill
    PTA(Basic Level)1020.月饼
    PTA(Advanced Level)1048.Find Coins
    PTA(Advanced Level)1050.String Subtraction
    PTA(Advanced Level)1041.Be Unique
    PTA(Basci Level)1043.输出PATest
    PTA(Basic Level)1039.到底买不买
    PTA(Basic Level)1033.旧键盘打字
    PTA(Advanced Level)1083.List Grades
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744747.html
Copyright © 2011-2022 走看看