说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android搭建NDK开发环境

HTML文档下载 WORD文档下载 PDF文档下载
Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。在此之前,Android平台的第三方应用程序均是依靠基于Java的Dalvik特制虚拟机进行开发的。原生SDK的公布可以让开发者更加直接的接触Android系统资源,并使用传统的C或C++语言编写程序,并在程序封包文件(.apks)中直接嵌入原生库文件。

 

于Android的NDK的概念这里就不解释啦。网上到处都有。这里讲述一下,编程和调试环境的搭建。
 
一,软件下载
    Android SDK :
        http://dl.google.com/android/android-sdk_r08-windows.zip。(2011/02/22可用)
 
    Android NDK :
        只能从百度上找 android-ndk-1.5_r1-windows.zip 官方下载地址不知道。
 
    Cygwin :
        http://cygwin.com/install.html。(2011/02/22可用)
 
二,安装
    Android NDK :
        只要展开就可以啦。
 
    Cygwin :
        要选好 gcc, make vi 等基本开发工具。用下列命令查看版本信息,以确认是否正确安装。
            gcc -v
            make -v
 
三,用 Cygwin + NDK 编译 NDK 带的例子
    1,启动Cygwin控制台。
    2,编辑 Home 目录下 .bash_profile 文件,加入下面两行。

本文作者:yutiansky

于Android的NDK的概念这里就不解释啦。网上到处都有。

  • 什么是Android NDK
  • Android NDK概述

这里讲述一下,编程和调试环境的搭建。

 

一,软件下载

    Android SDK :

        http://dl.google.com/android/android-sdk_r08-windows.zip。(2011/02/22可用)

 

    Android NDK :

        只能从百度上找 android-ndk-1.5_r1-windows.zip 官方下载地址不知道。

 

    Cygwin :

        http://cygwin.com/install.html。(2011/02/22可用)

 

二,安装

    Android NDK :

        只要展开就可以啦。

 

    Cygwin :

        要选好 gcc, make vi 等基本开发工具。用下列命令查看版本信息,以确认是否正确安装。

            gcc -v

            make -v

 

三,用 Cygwin + NDK 编译 NDK 带的例子

    1,启动Cygwin控制台。

    2,编辑 Home 目录下 .bash_profile 文件,加入下面两行。

 

 

NDK=/cygdrive/D/01_Work/01_Android/android-ndk-r5  export NDK 
3,重新启动Cygwin控制台。
4,执行编译命令。
$ cd /cygdrive/d/01_Work/01_Android/android-ndk-r5/samples/hello-jni/TianYu@tianyu-pc /cygdrive/d/01_Work/01_Android/android-ndk-r5/samples/hello-jni$ $NDK/ndk-buildGdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserverGdbsetup       : libs/armeabi/gdb.setupInstall        : libhello-jni.so => libs/armeabi/libhello-jni.soTianYu@tianyu-pc /cygdrive/d/01_Work/01_Android/android-ndk-r5/samples/hello-jni
四,在Eclipse上搭建编译环境。
    有上述基础后,用创建 Eclipse 的外部 Builder 功能,就可以在生成 .so 文件啦。
    1,在 Properties of ProjectName 中加 New_Builder。
    2,配置如下:
        Main>Location : Cygwin的bash.exe
            D:\01_Work\Cygwin\env\bin\bash.exe
        Main>Working Directory : Cygwin的bin目录
            D:\01_Work\Cygwin\env\bin
        Main>Arguments : Cygwin下运行的命令
            --login -c "cd /cygdrive/D/01_Work/02_Kinect/WS/HelloNDK && $NDK/ndk-build"
        Build Options>Specify Resources : Project 的 jni 目录
 
五,实例
在这里用写个NDK的实例。
一,软件环境
    WinXP SP3
    Android SDK 2.2
    Android NDK r5
 
二,调用方的 APP
    非常简单的应用程序,就是简单的调用一下 JNI 的函数。
    HelloNDK.java
package net.dncsoft.android.sample;    import android.app.Activity;  import android.os.Bundle;    public class HelloNDK extends Activity {        /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);            NDKBoundary ndkBoundary = new NDKBoundary();          int i = ndkBoundary.ndk_add(1, 2);          i++;      }  }  
NDKBoundary.java
package net.dncsoft.android.sample;    public class NDKBoundary {        static {          System.loadLibrary("HelloNDKImpl");      }        public native int ndk_add(int a, int b);  } 
编译生成 .class 文件。直接运行的话肯定出错。呵呵,废话,lib 还没做呢。
 
三,生成接口定义 H 文件
    javah -o d:\HelloNDKImpl.h -classpath d:\WS\HelloNDK\bin net.dncsoft.android.sample.NDKBoundary
 
三,被调用的 LIB
    HelloNDKImpl.cpp
#include <HelloNDKImpl.h>    jint Java_net_dncsoft_android_sample_NDKBoundary_ndk_1add(JNIEnv* env,          jobject thiz, jint x, jint y) {      return x + y;  }
Android.mk
LOCAL_PATH:= $(call my-dir)    include $(CLEAR_VARS)    LOCAL_MODULE    := HelloNDKImpl  LOCAL_CFLAGS    := -Werror  LOCAL_SRC_FILES := HelloNDKImpl.cpp    include $(BUILD_SHARED_LIBRARY)  
用上一讲的方法能编译成 libHelloNDKImpl.so 文件。
 
四,运行看看
    用下面命令启动模拟器,导入 LIB
cd %AndroidRoot%\tools  start emulator -avd avdname -partition-size 512  adb remount  adb -s emulator-5554 push d:\libHelloNDKImpl.so /system/lib 
 第 2 行命令是防止 Out of Memory 错误。
    第 3 行命令是防止 Read-Only 错误。
 
    现在可以运行 APP 啦。
 

 

谈应用分发控制力:还是渠道为王 Unity亚洲开发者大会:手游半衰期越短,开发者手中的机会越多 《割绳子》开发者:俄罗斯双胞胎的奋斗史 曾应聘Rovio未果 Win7系统上常见IE 10问题汇总 如果苹果推廉价手机,市场份额会不会超过安卓? 移动互联网下,如何做儿童新音乐? 第三届“中科杯”全国软件设计大赛正式启动 注重稳定性 Docker 0.2.0发布 何谓机器学习 机器学习能做些什么? 艰难的决定:EA裁员10%,殃及PopCap 或提前落地!Amazon和Facebook急聘SDN工程师(Python优先) 轻松完成网站提速:来自Google、淘宝等的Nginx PageSpeed模块 Touch-Pay发布 移动联通在手机游戏领域联合推融合计费SDK 如何组织大型JavaScript应用中的代码? Robert Scoble:戴Google Glass两周后 再也不想摘下它 赶时髦?Facebook CEO 2013年将领取1美元年薪 蓝港在线CEO王峰:我在网络游戏行业十年从业记 CMDN Club 27期:从儿童音乐教育到移动碎片化管理 聚焦全球移动市场——你所不知道的俄罗斯 MemSQL:号称世界上最快的内存-关系型数据库 兼容MySQL但快30倍 PC衰落 Intel转投Google挖掘移动市场潜力 移动周报:500元体感、精确到0.01毫米的Leap Motion TUP第29期:王淮、龚世海谈如何打造优秀的技术团队 一网打尽13款开源Java大数据工具,从理论到实践的剖析 从用户体验的善与恶说起,做用户爱“玩”的教育应用 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi “BlackBerry 10移动应用开发大赛”应用推荐 Java程序优化的一些最佳实践 Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具 Anchora鲁为民:PaaS是我的兴趣 次世代IDE Light Table 0.4发布 带来众多更新和改进 jsp里面有类似于asp的response.end语法吗? 求教各位大虾,这样的数据库程序如何实现。急切中。。。。。 vb中有没有像CommonDialog选文件的定位文件夹的控件? 怎么一次性加入多个子目录中的CPP文件到VC工程中 关于pos系统数据同步传输,欢迎大家进入讨论! 怎么得到本机的ip地址? 关于package 的问题 关于打开网页的问题 怎么在文本文件中的两行中添加一行?怎么删除一行? “split”分割问题 请教:怎么配置Tomcat可以禁止访问目录 ,比如访问 http://127.0.0.1/test 不会出现文件列表? 请问怎样在对话框窗口中的Edit控件里按下Enter键后不要退出 有关dremveaver ultradev 的动态网页制作问题, 请教高手。。 在delphi中如何实现全屏?? 100分。请大虾帮忙搞定 谁有存储过程的学习资料? 怎样判断计算机上有没有装madc数据库连接,? 项目中的一个问题,急待解决,请帮忙,谢谢 无聊散分 鼠标在图片上移动所发生的事件 一个怪问题:ping得通却NetTerm不上? JBuilder中如何拖动控件到面板,位置放置的问题。(高手指教) 请问在那里有csdn helper 下载 是否可以给表的字段编号? 我想让程序启动该怎么做 这样一个项目计划怎么写? vb.net 附值问题,请教高人 一次檢索出DataSet數據存至Session還是每次DataGrid翻頁時檢索為好? 一个程序不停的写一个文件,越来越大。怎样把以前的数据拷出来然后把他们从文件里删去? 会自动关机的电脑 怎样在listCTRL中加入彩色字?Waiting Online 请问到哪里去找w2k下编译需要的头文件和库文件呀 请问各位哪里有UNIX平台或LINUX平台的POWERBUILDER下载? 吐血给分!小问题,简单的很! 请教有关ServerSocket的问题 请问到哪里去找w2k下编译需要的头文件和库文件呀 想玩网络游戏,各位给推荐一下,谢了先!!! 请各位在这里留下已知的并已解决的BCB的BUG问题,也好让大家少走弯路了,谢谢! CMOS的问题,我是XP系统! 看看流星花园的搞笑版吧(转载) Word 和 Excel 启动不了 问几个菜鸟问题关于数组的。请大家帮忙! 关于用asp.net代码实现文件上传的问题!急! 新手提问:如何在vb中设计一个扁平的按钮。----在线等待~!~!! 这个查询可以在一条语句中完成吗?高分! 保存问题 关于浮点数累积误差的问题:水平直线旋转180度后两端点相差了1个像素。如何解决~高分谢高手。(内有代码) 一个在vb中使用数据库的问题,急! 请教VB怎样操作磁带机? SQL7.0表中记录打不开,提示如下: 怎么才能给Listview中的每一行都加一个图标,怎样引用Listview中每一行??? 描写人物心里惧怕的四字词语 急求清史稿八十九列传刘统勋那段的翻译! 班级挑战书我们是一六班,要跟五班较量,哪位高人帮我想一想怎样写,最好写出来!还有替一五班再写一份,最好不要写重了!是成绩上的较量! ( )奔( )突填动物的名字 哪位兄弟给个[清史稿 刘统勋传]的翻译 班级之间的挑战书怎么写我们九7班,他们九八班,应学校要求每个班都要找对手班级,不要太嚣张的,激情一点,然后,额,(里面有关于在学风,班风,纪律等等一系列的方面进行竞争的话——班头语 ()奔()突 (动物名称)()奔()突(动物名称) 刘统勋在哪个电视剧中出现过 班级各小组的挑战书怎么写?急.哎.今天必须要完成那. 第二个和第四个字是反义词的成语 仿句:我喜爱蓝色,蓝色是天空,我愿我的胸怀向天空一样宽广要自己写的、 急 如何写班级挑战书? 不小心喝了泡过动物尸体的水会怎么样 抬头仰望天空,它是那样的蓝,那样的惹我喜欢.在白云点缀的蓝天里让我不时的幻想,幻想那些可能和不可能发生的事. 班级挑战书怎么写学习上的啊.呵呵 泡凤爪是不是用泡尸体的水做的 湖心亭看雪词语手册字词拜托 Brain Teasers:When do people have two mouths? 干燥剂泡在水里喝能死人吗?那种超市里卖的饼干或者其他食品里有干燥剂,那种干燥剂吃了会死人吗?如果泡在水里一起喝下去呢?多少量的样子会死?劝人的爬,因为我本来就没说要自杀,只是很 湖心亭看雪的注释 填动物名称组词成语:()头()尾 ()首是檐 杀()骇() ()假()威 英语翻译1、部中议覆事件,出一言而势在必行,殆非怀谦集益之道.2、大臣任大责重,固不能免人指摘.闻过则喜,古人所尚.3、上临其丧,见其俭素,为之怮. 《湖心亭看雪》第一段翻译,赏析,重点字词及一切上课时需要的. when do pople have two mouths? 描写人表情或语言的四字词语和句子哪有? 六年级400字中秋日记 请将下面问题各各填一种动物天空之王——大地之王——群山之王——大海之王——凤之王——雷之王——水之王——火之王——(不要重复,小说设定,以符合要求最多者给分,一个5财富)兄 人从动物身上学到了什么?(物品) 湖心亭看雪的课下注释 湖心亭看雪翻译 注释 红星小学六年一班同学去西湖坐船游玩,每船8人则会余下4人,如果每船坐9人,则余一只船,该班共有(   )人,共有(  )只船. 浪漫庄园动物有产品出了怎么办? 求一篇中秋节的日记,是要六年级水平的作文,500字以上, 写一封英文信,关于自我介绍的,有关我的爱好,工作,身体等,最好在50字以上 帮我写一篇描写学校教室和朋友的英语作文.描写学校教室和朋友的英语作文,一定要是英语的,用上一个比较级的一个最高级,80字左右就行了, 找一篇关于【勇敢】这个话题的作文!600字以上.. 《塞翁失马》中的全篇原文急.因为有一句不知道是不是《塞翁失马》中的话. 从甲地到乙地有一段平路和上坡路,如果骑自行车保持平路每小时行15千米,上坡每小时行10千米,下坡每小时行18千米,那么从甲地到乙地需29分,从乙地到甲地需25分,则甲、乙两地相距多少千米? 宇宙是扩张的还是收缩? 塞翁失马焉知非福的原文 怎样过小年作文 我要《湖心亭看雪》这一文的解释! “杀()做() ”括号里填填动物名字 英语翻译4个单词 我喜欢蓝色的天空,我喜欢打篮球,我喜欢交朋友.我喜欢看书. 《智子疑邻》《塞翁失马》《山市》的原文 描写人物心理的四字词语 六年级中秋节日记,500字以上,带好词好句最好不要写错 速度越快越好 当然一定要500字以上 标点符号不算 寒假有趣的事简要记录100多字 描写人物心态的四字词语 《海燕》中 海燕的形象表现 形象特点 象征意义《海燕》中 海燕的形象表现 形象特点 象征意义 要 表现→形象→象征 的答题形式 一共要5个 急 关于寒假中做家务的事,作文100字, 2013新颖作文题目本人初一生,明天将参加市级别的作文大赛,有经验的大家麻烦提供些历年的大赛题目.帮忙帮到底的顺便指导个作文素材呗,THANK. 《湖心亭看雪》中的“强饮”应如何解释? 塞翁失马的原文?急...... 过小年的作文,要写关于过小年的,不要啰里啰唆,简洁点,不要写废话,字数450字以上的六年级作文! 求 我的大学生活英文作文 水平不用太高 带汉语翻译的谢谢 求塞翁失马原文 为什么我总喜欢对着天空发呆 信改变了我的生活 那篇作文的中文翻译、不要英语原文、谢谢
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘