懒得废话一大堆概念,关于ADT、NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了。

  步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过)

一. 环境搭建

1. 安装 jdk 
   安装完毕后配置好环境变量(我安装的是jdk1.7)
    JAVA_HOME = C:\Java\jdk1.7.0_51
    PATH = C:\Java\jdk1.7.0_51\bin
    CLASSPATH = .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar

  可以打开 cmd 后 输入:java -version 检查到底安装成功没。

2. 安装 eclipse 和 adt
  安卓官网已经将adt集成到了eclipse中,之前在线安装adt的过程简直是惨不忍睹。
  在安卓官网上下载集成包,我下载的是 adt-bundle-windows-x86_64-20140624.zip
      我把 这两个文件分享在了百度云盘可以下载:http://pan.baidu.com/s/1kTA4vn5
  下载后建议解压在 D:\Android 目录,也可以选择别的目录。
  集成包解压后在 D:\Android 下将有两个目录和一个文件:
     eclipse  : eclipse 目录
     sdk   :安卓sdk目录,里面只有4.4的包
     SDK Manager.exe : SDK管理器,可以用来下载别的版本的开发包,国内访问经常被拒绝,绕过的方法可以上网搜。
    
3. 安装NDK
  在安卓官网上下载 NDK 压缩包并且解压。需要注意的是NDK目录不得有空格,建议依旧解压到 D:\Android
  我下载的版本是 android-ndk-r9d-windows-x86_64.zip
  r7版本之后可以直接使用ndk-build命令完成编译,所以不必安装cygwin环境。
  配置环境变量path:
    在path 中加入 NDK的安装目录,比如:D:\Android\android-ndk-r9d

  保证在打开 cmd 后,输入 ndk-build 显示如下提示。

    
 
  而不是找不到 ndk-build 这条命令!

二. TestNDK

1. 建立新的安卓工程:TestNDK
向导在创建应用的时候 默认的包 前缀是 com.example ,没必要更改。所以最后的包名为:com.example.testndk
创建一个启动Activity,就叫 TestNDK (非要叫MainActivity的话,后面记得更改)
ps: 我创建的时候,选择创建Activity结果没有反应,只能创建一个java文件。这时记得在 AndroidManifest.xml 里面的application标签下加上:

 <activity
android:name="com.example.testndk.TestNDK"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> 、
       </intent-filter>
</activity>

不管是用向导还是直接新建java文件,最后用下列代码覆盖 TestNDK.java 文件:

 package com.example.testndk;

import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle; public class TestNDK extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView myTextView = new TextView(this);
myTextView.setText( stringTestNdk() );
setContentView(myTextView);
} public native String stringTestNdk ();
public native String stringTestNdk2 (); static {
   try{
System.loadLibrary("testNDK");
}catch(UnsatisfiedLinkError ule){
   System.err.println("WARNING: Could not load library testndk!");
}
}
}

2. 生成 .h 头文件
  使用eclipse 编译一下工程,目的是生成相关的的 .class 文件,因为 动态链接库还未创建,即使安装到手机上也会崩溃。
        不知道是不是版本的问题,我搜到的教程里面反正乱七八糟,根本就不对应我的实际情况。
  在我的电脑上,eclipse将生成的class文件存放在 bin\classes  (相对于工程目录,后面的操作全部基于根目录)
  生成 .h 头文件的程序是 javah (不了解的可以搜索相关资料看一下)
   在根目录下启动命令提示符(或者打开命令提示符切换到根目录下,取决你的右键菜单里面有没有打开命令提示符)。
     输入如下命令:
      javah -classpath bin\classes;D:\Android\sdk\platforms\android-20\android.jar -d jni com.example.testndk.TestNDK 
  其中 -classpath 里面有两个目录,一个是前面说的 bin\classes ,根据实际情况更改
  第二个是 安卓的jar包,要是不加上就会报错,如果你把sdk安装在别的目录,就做出相应的更改。如果目录里面有空格,就把字符串用 "" 包围。
  -d 指定生成的目录,即将生成的头文件存在在工程目录下的jni目录。

  上述命令执行完毕后,jni目录下增加了一个 :com_example_testndk_TestNDK.h 文件,内容暂时不用管。

3. 编译生成 so 文件
  在jni目录下创建两个文件
    第一个是:testNDK.c

 #include <jni.h>
#include <string.h>
// public native String stringTestNdk (); 方法的c签名,格式为 Java_包名_类名_方法名
JNIEXPORT jstring JNICALL Java_com_example_testndk_TestNDK_stringTestNdk(JNIEnv *env, jobject this)
{
return (*env)->NewStringUTF(env, "Hello,test NDK !");
}

    第二个是:Android.mk

 LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testNDK
LOCAL_SRC_FILES := testNDK.c
include $(BUILD_SHARED_LIBRARY)

  保存后,退回到工程目录下打开命令提示符,执行:ndk-build
  命令执行完毕后,在 libs\armeabi 目录下应该增加了一个 libtestNDK.so 文件。

4. 安装apk
  重新编译运行eclipse,不出意外将会启动一个程序,显示: Hello,test NDK !
  如果程序运行奔溃,并且Log处显示:WARNING: Could not load library testndk!。
  说明载入 共享库失败,如果确定代码没有变动,就用Winrar打开 bin目录下面的 apk文件,看看 lib/armeabi 里面有没有 libtestNDK.so 。 如果没有,就打开安卓工程的属性下的 java bulid path,将 libs/armeabi 加入源路径,并且重新清理运行。

三. 相关说明

1.  我在 TestNDK类中定义了两个 native 方法,生成的 头文件中有这两个方法的签名,但是我只实现第一个方法。
  如果你在 程序中调用了 第二个方法就会导致 找不到 native 方法异常。
   要是共享库载入成功(即没有显示 自定义的那个警告)

2.    上述仅实现了一个类中的一个方法,但是 一个 c 文件里面是可以包含多个 不同的导出函数的,所以 使用 javah得到的方法签名 的实现代码都可以放在一个 c 文件里面。                                (实际上方法签名也可以自己写,没必要非得用 javah)
    要是有多个c文件生成一个 so,比如 1.c 、2.c ,可以将  LOCAL_SRC_FILES 赋值为:
       LOCAL_SRC_FILES :=  1.c 2.c 
  
3.  关于 到底该如何编写c程序,可以参考教程《JNI完全手册》写的比较详细。

Android NDK 环境搭建 + 测试例程(转)的更多相关文章

  1. Android NDK 环境搭建 + 测试例程

    懒得废话一大堆概念,关于ADT.NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了. 步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过) ...

  2. 【转】Windows环境下Android NDK环境搭建

    原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...

  3. Windows环境下Android NDK环境搭建

    前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设 ...

  4. Android NDK环境搭建

    本文主要记录NDK环境在Ubuntu下的搭建. 下载NDK 在官网进行下载NDK https://developer.android.com/ndk/downloads/index.html 当前最新 ...

  5. android ndk环境搭建,如果是mac,请先装mac make编译器(可以使用Xcode进行安装)

    Android SDK:android-sdk-mac_86Android NDK: android-ndk-r4b-darwin-x86EclipseADTCDTANT搭建Android SDK开发 ...

  6. Android NDK 环境搭建

    使用最新ndk,直接抛弃cygwin,曾经做Android的项目要用到NDK就必需要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配 ...

  7. Android NDK环境搭建及调用JNI的简单步骤

    转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3396595.html Java Native Interface (JNI)标准是java平台的一部分 ...

  8. Android开发环境搭建篇详尽的教程实例汇

    原文链接:http://android.eoe.cn/topic/android_sdk 一.android开发环境搭建图文教程整理篇: 1.Android开发环境搭建全程演示(jdk+eclip+a ...

  9. Windows XP环境下 搭建Android NDK环境

    搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygw ...

随机推荐

  1. linux c静态链接库与动态链接库

    库函数是我们编程的时候经常用到的,我们协作编程的时候可以将常用的函数封装成库供大家使用,这样能够提高大家的工作效率.对于库函数,它分为动态链接库和静态链接库.对于静态链接库我们必须是连接到可执行文件中 ...

  2. 转:小心,apc可能导致php-fpm罢工!

    原文来自于:http://www.searchtb.com/2014/02/apc-lock-php-fpm.html 最近线上产品出现了502错误.一般出现502错误,都是php-fpm 进程处理请 ...

  3. unity3d中的http通信 二

    转载自 http://www.cnblogs.com/88999660/archive/2013/03/11/2954279.html 如果侵权,请及时通知我删除! using System; usi ...

  4. Unity3d 项目管理

    Unity3d  项目管理 1.项目管理采用TortoiseSVN方式进行管理,但是也要结合人员管理的方式,尽量在U3D中多采用Scene(关卡的方式),以一下目录的方式进行管理! 以名字的方式进行合 ...

  5. Yaroslav and Sequence

    Codeforces Round #182 (Div. 1) A:http://codeforces.com/contest/301/problem/A 题意:给你2*n-1个数,你每次可以选择n个连 ...

  6. cf C. Dominoes

    http://codeforces.com/contest/394/problem/C 题意:有n*m个骨牌,每个骨牌上有四种样式(“01,10,11,00”),让你重新排列成一个N*M的矩阵,使2* ...

  7. 趁有空,再了解一下GROOVY中关于类的通例

    简单的,浅浅的看一下. 想起了RUBY里覆盖类的方法... 在GROOVY里也同样提到了,比如TOSTRING... (其实,在我以前的经验中,从未用过这些东东..:)) 这样用了PACKAGE,显得 ...

  8. H3C S5500上层接路由,VLAN IP作网站配置实例

    # version 5.20, Release 2208 # sysname S5500-1 # clock timezone #Web#8#01 add 08:00:00 # super passw ...

  9. oracle存储过程 --1

    一,oracle存储过程语法   1.oracle存储过程结构  CREATE OR REPLACE PROCEDURE oracle存储过程名字 (     参数1 IN NUMBER,     参 ...

  10. 使用eclipse搭建嵌入式开发环境

    下载jdk http://download.oracle.com/otn-pub/java/jdk/7u4-b20/jdk-7u4-linux-i586.tar.gz 下载eclipse-cpp-ga ...