NDK 入门实例

在Eclipse中配置NDK自动编译环境builders

Android学习笔记——NDK中C++标准库、STL的配置;Include其他头文件

  参考了百度经验里面的部分内容,发现里面还有些细节没有写出来,其中遇到不少问题,所以就在这里写出来和大家分享!

  参考链接   Android NDK入门开发实例

  1、先下载  android-ndk32-r10b-windows-x86 我是32位的机子,将其放在一个没有空格的路径中,因为之后在配置cygwin的时候要求路径不能有空格。

  2、在cygwin官网上下载  cygwin   安装  ,这个网上有教程,注意不要少了make (我在网上看到的一篇教程里面就是少了make)

  安装完后进行测试   :打开cygwin  输入 make -v  gcc -v进行测试,出现下面的内容说明安装成功。

  

  3、配置cygwin 

  如果没有配置cygwin的话,在生成so文件的时候会出现  $NDK/ndk-build  :no such file or directory的错误

  在安装目录的home里面找到bash_profile

  在里面加入

NDK=/cygdrive/g/androidconfig/android-ndk32-r10b-windows-x86/android-ndk-r10b export NDK

  这里要注意两点:1、不能使用换行符

          2、路径中不能带有空格,否则在运行cygwin 的时候会提示错误

  配置好后 ,运行cygwin 输出  cd $NDK   会进入安装路径,说明配置成功

  4、编写android程序

  首先新建一个项目,在布局页面添加一个按钮即可,如下图所示,图中有两个控件,一个是textview,另一个是button。

                                                           Android NDK入门开发实例

                                   Android NDK入门开发实例

      新建一个类,并写一个native方法,我写的方法是,public native int add(int a, int b);

      实现传入的2个整形数字相加,这里的native方法不需要实现

                Android NDK入门开发实例

    打开本次项目的路径,里面有2个类,其中JNITest.java便是有native方法的类,下面需要先把这个java编程成class文件然后再编译成.h头文件           

                                Android NDK入门开发实例

     

  1. 在CMD中依次输入以下代码:

    cd C:UsersAdministratorworkspaceJNITestsrc(切换到项目的src目录下)

    javac comliutawjnitestJNITest.java(编译有native方法的java类)

    javah com.liutaw.jnitest.JNITest(从class生成.h头文件)

    Android NDK入门开发实例
    Android NDK入门开发实例
  2. 2

    在项目的根目录新建一个jni文件夹,并把刚才javah生成的 com_liutaw_jnitest_JNITest.h文件复制到jni目录下

    Android NDK入门开发实例
  3. 3

    打开com_liutaw_jnitest_JNITest.h,把定义的方法都改为实现,并把文件名的后缀名改为.c,注意方法的参数要加上,以下是修改前后的对比图。

    Android NDK入门开发实例
    1. 4

      在jni文件夹下新建一个Android.mk文件,输入以下内容,注意更改成你自己的库文件名和原文件名称

      LOCAL_PATH := $(call my-dir)

      include $(CLEAR_VARS)

      LOCAL_MODULE    := hellojni(库文件名)

      LOCAL_SRC_FILES := com_liutaw_jnitest_JNITest.c(原文件名称)

      include $(BUILD_SHARED_LIBRARY)

      2个文件完成之后应该是下面这张图。

      Android NDK入门开发实例
      Android NDK入门开发实例
       
      这里还需要新建一个Application.mk,原文中没有提到。
      新建Application.mk。在里面输入

      APP_ABI := all
      APP_PLATFORM := android-9

      这里需要注意的是  假如使用APP_ABI  是x86  那么会出现  is  not a valid ELF Object错误。这里为了方便直接使用all

      APP_ABI

      在默认情况下,NDK会使用'armeabi' ABI 来生成二进制机器码,这是基于ARMv5TE的浮点运算CPU,这可以通过使用此变量来选项不同的ABI(Application Binary Interface).
      例如:支持基于armv7 FPU指令集的设备:
      APP_ABI := armeabi-v7a
      支持IA-32指令集:
      APP_ABI := x86
      同时支持三种:APP_ABI := armeabi armeabi-v7a x86
      从NDK-r7版本后,同时支持三种还可以这样写:APP_ABI := all
       
      最后打开cygwin切换到项目目录
       
       
       
      最后补上onclick事件   运行OK!
原文地址:https://www.cnblogs.com/maydow/p/4672992.html