最简单的Android项目(NDK命令行编译)
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命令行编译)的更多相关文章
- VS2010命令行编译C#和VC项目
VS2010命令行编译C#和VC项目 VS2010命令行编译C#和VC项目 根据需要动态创建数据库字段后,需要动态创建或者调整页面,那就需要编译这些页面和后台文件.因此使用命令行编译将会非常方便,对于 ...
- 一个使用命令行编译Android项目的工具类
一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...
- Windows下搭建Android NDK开发环境及命令行编译
首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...
- Android 命令行编译、打包生成apk文件
一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1. ...
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...
- egret命令行编译项目时 版本不对应的问题
egret 命令行编译项目时 如使用 egret build -e 会出现版本不对应的问题 分析原因 A,B项目 A项目使用1.8的egret引擎, B项目使用2.5引擎 但本地引擎升级至2.5.5, ...
- android学习17——命令行建gradle工程
使用命令行建gradle工程要涉及到几个工具的版本. 1.gradle的版本.这个用gradle -version查到. 2.SDK BuildTools的版本. 这个要先配好SDK的环境变量,然后在 ...
- 命令行编译java项目
命令行编译java项目 项目名: testproj 目录 src -> cn -> busix -> test bin lib 编译项目 cd testproj javac -d . ...
- Windows下使用命令行编译Qt项目(解决DLL丢失问题)
一.前言 我之前用Qt做了个hello world,结果各种报错,一大堆DLL找不到,今天用命令行编译就通过了 二.准备工作 1.Visual Studio(有nmake就行) 2.Qt 3.把qma ...
随机推荐
- 读取位置 0xcccccccc 时发生访问冲突
XXXXX.exe 中的 0x1004eec2 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突 DEBUG模式下总是出现此错误,改为Release模式,错 ...
- 【剑指offer37】二叉树的序列化
序列化过程很简单,如果是采用先序序列,那么对先序遍历做出改变即可: 层序遍历建立二叉树,如: 1 2 3 4 # 5 6 输入第一行:将要输入的节点的个数N,如上面的为7 ...
- Java -- 通过 URLConnection 进行http请求中文乱码
对writer和reader指定字符集 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8 ...
- 阶段3 2.Spring_01.Spring框架简介_06.spring的体系结构
资料内提供了spring 的开发包 docs:文档 libs:jar包 schema:约束
- datagrid——jQuery EasyUI
API文档:[http://www.jeasyui.com/documentation/datagrid.php] 一.创建datagrid 在页面上添加一个div或table标签,然后用jquery ...
- Django ModelForm操作及验证
一.内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class LoginForm(Form): email = ...
- 【HR系列】SAP HR PA信息类型的创建与增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HR系列]SAP HR PA信息类型的创建与增 ...
- elementUI -->实现简单的购物车
<template> <div class="bbb"> <el-checkbox :indeterminate="isIndetermin ...
- 记一则update 发生enq: TX - row lock contention 的处理方法
根据事后在虚拟机中复现客户现场发生的情况,做一次记录(简化部分过程,原理不变) 客户端1执行update语句 SQL> select * from test; ID NAME --------- ...
- HDU 2100 Lovekey (26进制大数、字符串)
Lovekey Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...