使用NDK c++建立一个Android应用
使用NDK c++建立一个Android应用
一.工具
- ADT(集成了eclipse,cdt,ndk plug-in)
- NDK (用它来编译c/c++程序)
- JDK (Java开发包)
- ANT(eclipse打包插件)
二.配置环境变量
- 1.JAVA_HOME=C:\Program Files\Java\jdk1.7.0_71
- 2.ANT_HOME=D:\apache\ant
- 3.ANDROID_SDK_HOME=D:\SDK\android-sdk
- 4.NDK_HOME=D:\SDK\android-ndk-r10e
添加Path变量
JAVA_HOME%\bin;%NDK_HOME%;%ANDROID_SDK_HOME%\platform-tools;%ANT_HOME%\bin
三.环境检查
打开控制台,依次输入
- javac –version (检验JDK安装)
- ant –version (检验ant安装)
- ndk-build –version (检验NDK安装)
- adb devices ( 检验android platforms tools安装)
如果以上命令都是有效命令,安装完成
四.为Eclipse分别配置SDK和NDK位置
- Windows->Preferences->Android设置SDK路径
- Windows->Preferences->Android->NDK设置NDK路径
五.创建Android应用
打开eclipse,File->new->Project->Android->Android Application Project 创建Android应用。
六.让Android工程支持C++编译
右键单击工程,Android Tools->Add Native Support,在弹出对话框中直接点击finish,此时eclipse会自动在工程文件中创建jni文件,含对应配置文件和源文件
七.编写JNI及调用代码
//jni/hellojni.cpp
#include <jni.h>
jstring JniString(JNIEnv* env) {
return env->NewStringUTF("Hello,NDK");
}
extern "C"
{
JNIEXPORT jstring JNICALL Java_com_example_hellondk_NDKUtils_stringFromJNI(JNIEnv* env,jobject o){
return JniString(env);
}
}
//com.example.hellondk.NDKUtils
package com.example.hellondk;
public class NDKUtils {
public static native String stringFromJNI();
static {
System.loadLibrary("hellondk");
}
}
//com.example.hellondk.MainActivity
package com.example.hellondk;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView01 = (TextView)findViewById(R.id.textView01);
textView01.setText(NDKUtils.stringFromJNI());
}
}
八.编译生成so
- 1.通过Eclipse编译
右键单击工程进行Clean Project,然后再执行Build Project,即可在libs目录下看到生成的so文件 - 2.也可以通过命令行编译(定位到jni目录下),执行命令“ndk-build clean”进行清理,执行“ndk-build”进行编译
九.编译支持多架构
- 在jni目录下创建Application.mk文件
配置 APP_ABI := all 重新编译,即可在libs目录下看到编译生成所有平台so - 也可以指定需编译支持的架构平台
APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64
如果你的工程没有Application.mk文件,则系统会用默认的,$(NDK_ROOT)/build/core/default-application.mk
十.本示例代码
附:参考资料
- 如何使用NDK c++建立第一个Android应用
- Android 开发 之 JNI入门 - NDK从入门到精通
- Android NDK开发指南---Application.mk文件
- NDK Build 用法(NDK Build)
- 通过 JNI 调用 OpenSSL 实现加密解密
使用NDK c++建立一个Android应用的更多相关文章
- VS2015下的Android开发系列02——用VS开发第一个Android APP
配置Android模拟器 这算是第一篇漏下说的,配置好VS的各参数,新建Android项目后,会发现菜单下的工具栏会多出Android相关的工具栏,红色圈出的就是AVD. 打开AVD后可以从模版处选一 ...
- 创建你的第一个Android PHP应用
google的开源移动操作系统Android给智能手机市场带来了风暴.不像Apple,对想要为水果市场(Iphone App Store)提供应用软件的开发者们有着严格的指导原则以及要求,Google ...
- 在开发第一个Android应用之前需要知道的5件事:
你能否详细讲述一下,在开发Android应用过程中每一阶段要用到的技能和编程语言? 建立一个Android应用程序可以归结为两个主要技能/语言:Java和Android系统.Java是Android的 ...
- Android在如何建立一个WebServer
今天老板交待任务最终完成了,感觉收获颇多,所以写一个关于它的记录,首先,看一下.老板的需求 需求: 希望移动端的用户标识(IMEI)和HTML页面的用户标识(Cookie)连接起来,当中HTML页面可 ...
- 建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS)
建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS) 电话黑客android恶意软件编程黑客入侵linux 随着我们继续我们的系列,AMUNET应用程序变 ...
- 【起航计划 022】2015 起航计划 Android APIDemo的魔鬼步伐 21 App->Launcher Shortcuts 为某个非主Activity在Home Screen上建立一个快捷方式
Android 操作系统对于<intent-filter>含有下列属性的Activity会在应用程序管理器(Launcher)显示一项,一般这个Activity对应于某个应用的主Activ ...
- Android的NDK开发(2)————利用Android NDK编写一个简单的HelloWorld
1.Android NDK简介 NDK全称为native development kit本地语言(C&C++)开发包.而对应的是经常接触的Android-SDK,(software devel ...
- JNI 在Android Studio利用NDK编译运行一个简单的c库
NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些.如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ...
- Delphi XE7下如何创建一个Android模拟器调试
利用Delphi XE7我们可以进行多种设备程序的开发,尤其是移动开发应用程序得到不断地加强.在实际的Android移动程序开发中,如果我们直接用android真机直接调试是非常不错.一是速度快,二是 ...
随机推荐
- sencha/extjs 动态创建grid表格
//创建普通表格 id,父容器,标题,json数据字符串,列名(逗号分隔),json数据key即store的fields属性(逗号分隔) function createCommonTable(id, ...
- css:条件注释判断浏览器
所有的IE可识别 Target ALL VERSIONS of IE <!--[if IE]> <link rel="stylesheet" type=" ...
- ECMall如何支持SSL连接邮件服务器的配置
首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接. 然后,得对相应代码做一定调整. 1. 覆盖phpmailer 请从附件进行下载: http://files.cnblogs. ...
- PHP系列之一traits的应用
Traits 在PHP中实现在方法的重复使用:Traits与Class相似,但是它能够在Class中使用自己的方法而不用继承: Traits在Class中优先于原Class中的方法,引用PHP Doc ...
- GDB调试器使用总结
概述:GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情.强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到.下 ...
- jquery实现轮播
HTML代码: <div class="ad"> <ul class="slider"> <li><img src=& ...
- SharePoint 中关于event receivers的讨论
今天一早,跟几个小伙伴在群里讨论了有关事件触发器的东西,感觉收获颇多,拿出来和大家分享.讨论的内容,主要就是关于事件触发器的同步/异步的设置以及作用. 其实接触SharePoint颇久,对于事件触发器 ...
- 【读书笔记】iOS-UIFont-动态下载系统提供的字体-官方代码
一,工程目录 二,AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption ...
- iOS小游戏打地鼠
#import "ViewController.h" #import <AudioToolbox/AudioToolbox.h> @interface ViewCont ...
- ReactiveCocoa中信号的使用
前言: 很早之前就有看过ReactiveCocoa,那会看的时候知道是一个新的框架关于响应式编程,具体什么也没有深入研究,今天也对ReactiveCocoa这个框架的使用进行了一定的了解.在githu ...