Android的NDK编程需要下载NDK编译环境,可以从官网下载window64位版,然后解压到任意目录即可。

NDK的实现其实是利用里Java的jni方法,所以前期的步骤可以参考jni的实现方法,只是编译时可以利用NDK工具来进行。

首先将Java源程序写好,例如:

 package test.android;

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.widget.LinearLayout;
import android.widget.Button; public class Mini extends Activity { static {
System.loadLibrary("jt");
} public native String stringFromJNI(); public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); LinearLayout lla = new LinearLayout(this);
Button b = new Button(this);
b.setText("click me"); lla.addView(b);
this.setContentView(lla); final Activity _this = this; b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(_this, stringFromJNI(), Toast.LENGTH_LONG).show();
}
});
}
}

利用javah工具生成.h头文件,然后在项目根目录新建jni目录,在jni目录新建jni.c文件,如下:

 #include <string.h>
#include <jni.h>
#include "test_android_Mini.h" JNIEXPORT jstring JNICALL Java_test_android_Mini_stringFromJNI
(JNIEnv *env, jobject _this)
{
return (*env)->NewStringUTF(env, "return from c");
}

在jni目录里新建Android.mk文件(注意大小写),这个文件是说明如何编译动态链接库的,内容如下:

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)

 LOCAL_MODULE := jt
LOCAL_SRC_FILES := jni.c include $(BUILD_SHARED_LIBRARY)

打开命令处理程序,切换到项目目录,输入以下命令:

D:\Android\android-ndk-r11c\ndk-build

ndk-build前面是你的ndk解压目录。

这时,项目下会产生libs目录,里面就是生成的动态链接库。

因为android有多重cpu平台,所以还可以用一个文件来配置生成的平台类型。

在jni目录下新建Application.mk(注意大小写),输入如下内容:

APP_ABI := armeabi armeabi-v7a x86

再次使用ndk-build命令编译,就会在libs下生成三种平台的动态链接库

接下来打包的过程和以前的打包步骤只有一步不同,用apkbuilder将所有文件打包成apk时,加上动态链接库的文件目录,用-nf 目录,例如:

D:\Android\sdk\tools\apkbuilder.bat \workspace\test\android\minimum\mini_unsigned.apk -v -u -z D:\workspace\test\android\minimum\bin\mini.ap_ -f D:\workspace\test\android\minimum\bin\classes.dex -rf D:\workspace\test\android\minimum\src -nf D:\workspace\test\android\minimum\libs

然后签名就生成最终的apk文件了。

最简单的Android项目(NDK命令行编译)的更多相关文章

  1. VS2010命令行编译C#和VC项目

    VS2010命令行编译C#和VC项目 VS2010命令行编译C#和VC项目 根据需要动态创建数据库字段后,需要动态创建或者调整页面,那就需要编译这些页面和后台文件.因此使用命令行编译将会非常方便,对于 ...

  2. 一个使用命令行编译Android项目的工具类

    一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...

  3. Windows下搭建Android NDK开发环境及命令行编译

    首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...

  4. Android 命令行编译、打包生成apk文件

    一.搭建搭建环境 1. 安装JDK 和 Android SDK   2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1. ...

  5. 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏

    也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...

  6. egret命令行编译项目时 版本不对应的问题

    egret 命令行编译项目时 如使用 egret build -e 会出现版本不对应的问题 分析原因 A,B项目 A项目使用1.8的egret引擎, B项目使用2.5引擎 但本地引擎升级至2.5.5, ...

  7. android学习17——命令行建gradle工程

    使用命令行建gradle工程要涉及到几个工具的版本. 1.gradle的版本.这个用gradle -version查到. 2.SDK BuildTools的版本. 这个要先配好SDK的环境变量,然后在 ...

  8. 命令行编译java项目

    命令行编译java项目 项目名: testproj 目录 src -> cn -> busix -> test bin lib 编译项目 cd testproj javac -d . ...

  9. Windows下使用命令行编译Qt项目(解决DLL丢失问题)

    一.前言 我之前用Qt做了个hello world,结果各种报错,一大堆DLL找不到,今天用命令行编译就通过了 二.准备工作 1.Visual Studio(有nmake就行) 2.Qt 3.把qma ...

随机推荐

  1. c++中字符输入函数cin.getline在输入char与string时的不同

    cin.getline在输入char时: using namespace std; ; char name[ArSize]; char dessert[ArSize]; cout << & ...

  2. HTML基础汇总

    一.HTML的概述(了解) a.html是什么 : hypertext markup language 超文本标记语言           超文本:音频,视频,图片称为超文本..           ...

  3. python 引流

    Python给抖音自动点赞和评论,实现自动化运营! 都说抖音有毒,一刷就停不下来了.看来抖音这款产品紧紧抓住了人们内心深处的某些需求.当然今天不是来探讨抖音这款产品的啊.今天我们来学习如何用 Pyth ...

  4. OpenStack 虚拟机冷/热迁移功能实践与流程分析

    目录 文章目录 目录 前文列表 虚拟机迁移的应用场景 需要迁移的虚拟机数据类型 虚拟机迁移的存储场景 文件存储 块存储 非共享存储 迁移的类型 迁移的方式 执行虚拟机冷迁移 冷迁移日志分析 执行虚拟机 ...

  5. PHP LDA off 解决

    搭建完zabbix初始登录zabbix显示 PHP LDAP off 解决 不需要重新编译php 就可以增加 LDAP 模块 .首先进入自己的 PHP 安装目录中找到 ldap 文件夹 [root@b ...

  6. 由于SID连接不匹配,监听器拒绝连接。

    java.sql.SQLException: Listener refused the connection with the following error:ORA-12505, TNS:liste ...

  7. Linux内存:物理内存管理概述

    内存中的物理内存管理 概述 一般来说,linux内核一般将处理器的虚拟地址空间划分为2部分.底部比较大的部分用于用户进程,顶部则专用于内核. 在IA-32系统上,地址空间在用户进程和内核之间划分的典型 ...

  8. python学习之内置函数(一)

    4.7 内置函数 4.7.1 内置函数(1) eval 执行字符串类型的代码,并返回最终结果. eval('2 + 2') # 4 n=81 eval("n + 4") # 85 ...

  9. 2019JAVA第四次实验报告

    JAVA实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间 2019/9/29 评分等级 实验四 类的继承 1.实验目的 掌握类的继承方法: 变量的继承和覆盖,方法的继承.重载和 ...

  10. deepin下安装Qt5&以及部分问题解决

    deepin安装Qt5 1 deepin商店里的Qt5版本太低,可以直接下载官方的Qt5安装包: 官方下载渠道:http://www.qt.io/download-open-source/ 离线镜像下 ...