使用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应用的更多相关文章

  1. VS2015下的Android开发系列02——用VS开发第一个Android APP

    配置Android模拟器 这算是第一篇漏下说的,配置好VS的各参数,新建Android项目后,会发现菜单下的工具栏会多出Android相关的工具栏,红色圈出的就是AVD. 打开AVD后可以从模版处选一 ...

  2. 创建你的第一个Android PHP应用

    google的开源移动操作系统Android给智能手机市场带来了风暴.不像Apple,对想要为水果市场(Iphone App Store)提供应用软件的开发者们有着严格的指导原则以及要求,Google ...

  3. 在开发第一个Android应用之前需要知道的5件事:

    你能否详细讲述一下,在开发Android应用过程中每一阶段要用到的技能和编程语言? 建立一个Android应用程序可以归结为两个主要技能/语言:Java和Android系统.Java是Android的 ...

  4. Android在如何建立一个WebServer

    今天老板交待任务最终完成了,感觉收获颇多,所以写一个关于它的记录,首先,看一下.老板的需求 需求: 希望移动端的用户标识(IMEI)和HTML页面的用户标识(Cookie)连接起来,当中HTML页面可 ...

  5. 建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS)

    建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS) 电话黑客android恶意软件编程黑客入侵linux 随着我们继续我们的系列,AMUNET应用程序变 ...

  6. 【起航计划 022】2015 起航计划 Android APIDemo的魔鬼步伐 21 App->Launcher Shortcuts 为某个非主Activity在Home Screen上建立一个快捷方式

    Android 操作系统对于<intent-filter>含有下列属性的Activity会在应用程序管理器(Launcher)显示一项,一般这个Activity对应于某个应用的主Activ ...

  7. Android的NDK开发(2)————利用Android NDK编写一个简单的HelloWorld

    1.Android NDK简介 NDK全称为native development kit本地语言(C&C++)开发包.而对应的是经常接触的Android-SDK,(software devel ...

  8. JNI 在Android Studio利用NDK编译运行一个简单的c库

    NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些.如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ...

  9. Delphi XE7下如何创建一个Android模拟器调试

    利用Delphi XE7我们可以进行多种设备程序的开发,尤其是移动开发应用程序得到不断地加强.在实际的Android移动程序开发中,如果我们直接用android真机直接调试是非常不错.一是速度快,二是 ...

随机推荐

  1. Gridview的RowDataBound事件(添加删除提示,改变背景颜色)

    protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e) { //如果是绑定数据行 if (e.Row.Row ...

  2. 用stimulsoft Reports报表工具制作简单报表的过程

    这是在数据库sql server中People表的数据

  3. android 6.0 httpclient

    Apache HTTP Client RemovalAndroid 6.0 release removes support for the Apache HTTP client. If your ap ...

  4. PowerShell与CMD在路径解析上的一点不同

    对于路径含有空格的文件夹,在加入PATH环境变量时,前后往往会加上引号.这种情况,CMD可以正确识别:但是Powershell却不能加上引号,否则无法定位路径. 例如,在PS中,$env:path查看 ...

  5. 用SQL语句操作数据

    转载请注明出处:http://www.cnblogs.com/smbk/ 1.点击[新建查询]按钮,打开SQL命令编辑框,对数据库表的操作以及维护都可以通过编辑SQL命令实现. 2.在编辑框内编辑创建 ...

  6. Angular 核心概念2

    自定义指令 指令增强了 HTML,提供额外的功能 内置的指令基本上已经可以满足我们的绝大多数需要了 少数情况下我们有一些特殊的需要,可以通过自定义指令的方式实现 普通指令 语法 <div hel ...

  7. A除以B问题

    描述:本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入:输入在1行中依次给出A和B,中间以1空格分隔. 输出: ...

  8. 关于一个js连续赋值问题之我见(词略穷,见谅)

    前几天在搜索面试题时发现了这么一段代码,执行完后感觉完全不与所想的一样 var a = { n : 1 }; var b = a; a.x = a = {n : 2}; console.log(a.x ...

  9. c# Json Dictionary序列化和反序列化

    说明:Dictionary对象本身不支持序列化和反序列化,需要定义一个继承自Dictionary, IXmlSerializable类的自定义类来实现该功能.感觉完全可以把这样的类封装到C#库中,很具 ...

  10. 在Java中调用C

    在Java代码中通过JNI调用C函数的步骤如下: 第一步:编写Java代码 第二步:编译Java代码(javac Java文件) 第三步:生成C代码头文件(javah java类名,自动生成) 第四步 ...