使用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. c++容器(vector、list、deque)

    vector ,deque 和 list 顺序性容器: 向量 vector :   是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可 ...

  2. C#语言各种集合介绍

    集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问)一个集合包括多个元素,即有一个集合类对象和N个元素对象 因为任何集合类都实现了IEnumerable接口,所以任何集 ...

  3. [CLR via C#]21. 自动内存管理(垃圾回收机制)

    目录 理解垃圾回收平台的基本工作原理 垃圾回收算法 垃圾回收与调试 使用终结操作来释放本地资源 对托管资源使用终结操作 是什么导致Finalize方法被调用 终结操作揭秘 Dispose模式:强制对象 ...

  4. java判定字符串中仅有数字和- 正则表达式匹配 *** 最爱那水货

    1.当有其他字符出现时,返回的数组长度>1 String s = "3---6\\5656";        Pattern pattern = Pattern.compil ...

  5. maven工程导入时解决Cannot change version of project facet Dynamic Web Module to 2.3

    解决方法:修改web.xml,在头部加入内容,加入后为: <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q ...

  6. Linux Shell系列教程之(十四) Shell Select教程

    本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...

  7. 二进制打印与逆序_C语言(转)

    //二进制逆序 by MoreWindows( http://blog.csdn.net/MoreWindows ) #include <stdio.h> //二进制打印函数 templa ...

  8. js中的浅拷贝和深拷贝

    说说最近所学:浅拷贝和深拷贝也叫做浅克隆和深克隆,深浅主要针对的是对象的"深度",常见的对象都是"浅"的,也就是对象里的属性就是单个的属性,而"深&q ...

  9. IOS6学习笔记(四)

    1.GCD设置一个timer计时器 - (void)awakeFromNib { __weak id weakSelf = self; double delayInSeconds = 0.25; _t ...

  10. Postman的使用

    在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件 ...