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

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 啦。
 

 

搜狗号码通产品经理谈微创新 数据和运营更关键 在线推荐系统是如何进行工作的? 欧朋浏览器上架App Store,iOS生态真要变天? 苹果iOS 6.1地图搜索API将替代谷歌Places Oracle向开发者承诺 称尽快修复Java安全问题 日本:开发者与投资人都不容忽视的移动市场 Unity 3D引擎:十大最火的插件推荐 重塑品牌 RIM更名黑莓 发布BlackBerry 10移动操作系统及新手机 NoSQL依赖的不只是大数据 还有应用程序架构的改变 新一代Apple TV增强内在组件 外观不变 加速Web开发的7款知名HTML5框架 Firefox OS开发者日来袭 5小时15款Web应用出炉! 微软发布Office 365家庭高级版 订阅费499元/年 鲍尔默对Office信心满满,十亿用户量触手可及 【多图】梦幻现实 IBM的未来超级计算机水世界 一名骨灰级工程师的OpenStack部署总结引发的讨论 解读DuckDuckGo搜索 百万点击也敢叫板Google 开发者成功学:扔掉你那些很sexy的想法 VMware严控ESXi API 引发用户和ISV被绑架担忧 布局O2O Facebook推出实物礼品卡 iSuppli:微软Surface RT实际销量远低于出货量 业界前三甲:App Store两个刷榜者,站了出来 极客无极限 一行HTML5代码引发的创意大爆炸 将服务器“弃”之荒野? 微软玩转露天数据中心 Dropbox:我们现在关注“内容” 而不仅仅是文件存储 访Teradata Aster Mayank Bawa:抛弃无效数据,让分析走向大众化 谷歌Chrome或新增通知中心 与Google Now整合 传言称HBO节目将登陆苹果Apple TV? Crashlytics被收购,应用崩溃报告服务要火了? 微软公布WP7.8完整功能 诺基亚率先升级 BlackBerry 10或许不仅仅是一剂强心针 谁能告诉我这样把对话框的背景变成一个位图? icon to bmp的 代码???????????????? 图的表示问题 关于逻辑坐标和物理坐标问题的讨论 这是怎么了--winme 的工具栏没了,SOS SOS 请各位帮忙!!!! 烦请各位告诉我CBitmap和HBITMAP的区别及相互转换方法。多谢了 请问,当我将应用程序和我的指定文件类型相关联时候,我怎么才能指定该文件类型的图标。我试了将ResourceView中的ICON修改,可还是不行。 如何读AVI文件到缓冲区 今日我要把分全送人,我要隐退江湖了 关于关闭“进程”的问题???,help!!!!!!! 在家用SQL server7.0 做的數據庫backup文件怎麼不能在公司的機器上restore,急死我了!!! 关于MTS问题 给分王,我要功成隐退了 关于fdisk的使用出现意想不到的问题!!!!! 在公司做好的本地程序,和数据库,如何上传 有缘人,送分人,功成身退 誰有Java的在線网絡游戲,就象263,yahoo上那樣的. error C2664是怎么回事?十万火急!!! 我的编译器总出 LINK : fatal error LNK1104: cannot open file "Debug/Typer.exe" 是什么原因? 送分喽 vb中的问题!!!急 请问:fastreport的自定义变量如何与delphi变量进行互相传递!!! 请问各位高手关于局域网共享上网的设置问题。 basic 的数据结构问题 asp与xml 百分求维护经验 初级问题 求救:如何用fileup组件将一个文件同时存到两台机子的硬盘上! 有关netmeeting、AVPhone或其它做视频会议相关控件的使用方法。 a question about String Type!Please help me! 关于%include的问题。高分 vb如何访问sql-server。 有用SDK编写的象“我的电脑”那样的程序吗? 请教:如何绘制成绩分析的正态分布曲线? bean里删除文件? 请问关于响应事件的问题?? 请问怎样用在Active DLL中调用ASP的response对象? 请介绍几本关于vb的书,不是入门的书,有没有向<delphi5开发人员指南》这样的书???? dos下编程,如何获得文件创建时间? 如何判断存储过程执行成功结束?(50分相送) 谁行行好吧,小弟谢过了!(sql的cd key) 请教现在是应该学习VB6还是VB.NET? 关于在mfc中自定义类的一个问题 请教现在是应该学习VB6还是VB.NET? 谁有在VB中开发DirectX的教程,请推荐下载地址. zrong(zr) TommyTong(童童) GreenWaterBlueSky(我的家在碧水蓝天) 进来看一看可以吗? 谁行行好吧,小弟谢过了!(sql的cd key) 这里是个关于Iczelion的win32的汇编教程中的一个问题,请各位指点! 请问如何让VB。NET编译的。EXE文件在没有装有。NET架构的系统上运行? 大白鲨:计算机软件专业到低学那些课程 窗口的最小化和最大化事件是什么? 我想知道怎么样增加财富值. 运用 《文化生活》知识 谈谈如何发展中国特色社会主义文化 英语作文,my best friend还有修改一下错误的地方.如果有不连贯的地方,望指出,并修改A friend is a person who can let you feel warm when you are depressed.So I have many friends.But XXX is my best friend.He is as old as me.He t 我想知道如何增加我的财富值 荀子与孟子的人性观及政治主张不同点? 解释词语!速度征求:匆促:留心:有条不紊:解释!快!急需 我想知道如何可以增加财富值 论述孟子、荀子的人性观 解释词语的意思(速度!~)忐忑不安:静谧:窥伺:栖息:忧郁:晨曦:倾泻: 我想知道如何快速地增加我的财富值 在人性问题上,孟子主张本善,荀子主张本恶.在人性向善的方法上,孟子主张通过教化,扶植和培养善的萌芽,使善性得以发扬光大;荀子主张通过教化,限制恶的趋势,使人性之恶向善转化.下列错 形容鸟儿活泼、健康、生命力旺盛? 我想知道如何增加财富值? 主张“人性善”的是 A孔子B老子C孟子D荀子 英语作文 My best friends 我想知道财富值怎样可以增加得很快我想知道悬赏分这个 金融杠杆究竟是啥意思啊?看到一些投资 金融方面的书~经常是什么华尔街 杠杆收购之类的话~请问究竟是啥意思啊? 显卡的英文单词代表什么?n卡和a卡的各个英文单词代表什么?Graphics又代表什么? 我想知道我现在的财富值是多少,可是要怎么查呀? 什么是“杠杆贷款”,他对于金融机构的作用怎样的?看到了这么一个新闻,来自华尔街日报的.是在说花旗银行最近的行动,要打成一笔交易,来获取120亿美元的杠杆贷款.请问,这个杠杆贷款跟普 英文中R代表什么意思 求my mother英语作文50字 杠杆化金融产品有哪些? 孟子的政治主张 运用文化生活中有关传统文化的知识谈谈对春节拜年的认识 直到现在我才知道家庭的真正含义用英语怎么说 孟子的政治观点有什么? 高二政治必修三文化生活知识点整理 啊尔卑斯棒棒糖有什么含义? 孟子提出了_____,______的政治主张 我想知道得名得到财富值? 我想知道怎么快速得到财富值 英语作文My best friend要求:她的名字叫凯特,是我最好的朋友,她家住在我家隔壁,5年的好朋友,高个,长发,聪明,乐于助人,有幽默感,爱讲笑话,不经常见面,她长大后的梦想是当歌手,游全世界,..写 蓝球比赛七局四胜.第一肠比赛组织者可货票房收入3a万元,后每次比上一次多a万.最后组织人可以得到多少收入 不少于33a的溉率四点之前结束提问! 我想知道怎么才能快速得到财富值. 求篇英语作文:My Best Friend 要求如下描述我的好朋友孙悦玲,她是我的好朋友,她很健谈和很随和,身材很高,经常和我一起出去玩和打网球.或自己在编一点,反正要50个单词, 最后一道题,有财富值 我想知道怎么样能快速的得到财富值呢 我不能表达我意思用英语怎么说 就剩这道题了,弄完给财富值 我想知道如何获得财富值?如何能快速的获得? 表示...的意思用英语怎么说 自行车轮胎安装在前轮可行驶5000米,安装在后轮可行驶3000米,如调换使用,一对新轮胎可行驶多少千米?行多少米对调一次? 我想知道财富值怎么样能快速的得到财富值呢? “爸爸的微笑消失了,脸色变得严肃起来”是因为 斯丢被 是一个英文单词 斯丢被是我中文翻译出来的~ 2.5平方电线直径是1.76可以吗 ——是一笔财富 作文 是英文 所以用汉字代替了 以《my best friend》写两篇英语作文,60词左右,要求用上比较级. 六年级的一篇作文《我的财富》帮我找材料,越多越好.提纲最好一篇记叙文,要有具体事例 如题 2.5平方电线直径是1. 写景的作文马上!看到我的问题会写的快写!OK!财富全给你! 凹订斯 英语怎么意思? 运用《经济生活》的知识,谈谈你对“市场是发展文化产业最好土壤”的理解.结合材料.美国好莱坞电影,日本原创漫画,韩剧在中国红级一时,没有金币了,那个好心老师或者学生帮帮忙啊 这几个词的意思 运用文化生活的知识回答,为什么我国仍然存在落后文化和腐朽文化? 请运用文化生活有关知识谈谈我们应该如何继承和发展中国传统文化? 词语的意思给好评
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘