最简单的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 ...
随机推荐
- OSPF协议学习以及路由器配置
OSPF协议学习以及路由器配置 1.实验任务 2,使用eNsp搭建网络拓扑 3.配置路由IP ps:要使用GE(3层口),2层口(E口)需要先配置Vlan才能配置IP地址 4.配置路由器R1的ospf ...
- java:JavaScript2:(setTimeout定时器,history.go()前进/后退,navigator.userAgent判断浏览器,location.href,五种方法获取标签属性,setAttribute,innerHTML,三种方法获取form表单信息,JS表单验证,DOM对象,form表单操作)
1.open,setTimeout,setInterval,clearInterval,clearTimeout <!DOCTYPE> <html> <head> ...
- WebSocket-Node
WebSocket Client & Server Implementation for Node 参考资料:[https://github.com/theturtle32/WebSocket ...
- 使用FreeHttp任意篡改http报文 (FreeHttp使用及实现说明)
本文转自:https://www.cnblogs.com/lulianqi/p/10428551.html 前言 FreeHttp是一个Fiddler插件借助FreeHttp您可按照您自己的设定修改请 ...
- Mac_Navicat Premium连接MySQL错误2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found
mac下MySql启动连接报错:Authentication plugin ‘caching_sha2_password’ cannot be loaded: dlopen(/usr/local/my ...
- linux stat 命令 显示文件和文件系统状态(查看文件属性) 查看文件inode
stat 显示文件和文件系统状态(查看文件属性) 查看文件inode详细信息 [root@MongoDB ~]# stat /etc/hosts File: ‘/etc/hosts’ Size: B ...
- CentOS8Linux中配置网易云网络yum源安装软件
在CentOS8Linux中配置网易云网络yum源安装软件 前提是你的操作系统是CentOS-Linux 你已经配置好了本地yum源,并且你的网络是可用的. 本地yum源配置请参考:https://w ...
- Spring MVC 中使用AOP 进行事务管理--XML配置实现
1.今天写一篇使用AOP进行事务管理的示例,关于事务首先需要了解以下几点 (1)事务的特性 原子性(Atomicity):事务是一个原子操作,由一系列动作组成.事务的原子性确保动作要么全部完成,要么完 ...
- gRPC编译教程
windows平台的编译 一.编译openssl ① 安装perl(可以使用ActivePerl),执行perl Configure VC-WIN64A no-asm .在这里解释一下参数含义,VC- ...
- HDU-4717 The Moving Points(凸函数求极值)
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...