android开发实践之ndk编译命令简单示例
前言
Android提供了NDK工具,用来编译native代码(c/c++),该工具配置好了相关的交叉编译环境和工具链,只需要你简单地编写几个.mk文件即可将你的c/c++代码编译为Android的java工程/Android手机可以识别、加载和运行的库或者应用程序。
默认情况下,使用NDK编译c/c++代码,需要将该代码放置到任一个Android应用工程的jni目录下,然后编写相应的Android.mk文件,并执行ndk-build
命令完成编译。其实你也是可以在任意目录下去编译native代码的,只需要在ndk-build
命令后面添加相应的命令行参数即可,这里给出一些常用的ndk-build
命令行参数,方便大家灵活地使用NDK编译自己的native代码,具体的示例我将会在后续的文章中给出。
ndk-build命令行参数
1、ndk-build NDK_LOG=1
用于配置LOG级别,打印ndk编译时的详细输出信息
2、ndk-build NDK_PROJECT_PATH=.
指定NDK编译的代码路径为当前目录,如果不配置,则必须把工程代码放到Android工程的jni目录下
3、ndk-build APP_BUILD_SCRIPT=./Android.mk
指定NDK编译使用的Android.mk文件
4、ndk-build NDK_APPLICATION_MK=./Application.mk
指定NDK编译使用的application.mk文件
5、ndk-build clean
清除所有编译出来的临时文件和目标文件
6、ndk-build -B
强制重新编译已经编译完成的代码
7、ndk-build NDK_DEBUG=1
执行 debug build
8、ndk-build NDK_DEBUG=0
执行 release build
9、ndk-build NDK_OUT=./mydir
指定编译生成的文件的存放位置
10、ndk-build -C /opt/myTest/
到指定目录编译native代码
例:
编写 .c 文件
假设你在 ~/math 目录下编写了一个 math.c 文件,内容如下:
#include <stdio.h> int add( int a , int b ) { return a+b; }
编写 Android.mk 文件,内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := dmath LOCAL_SRC_FILES := math.c include $(BUILD_SHARED_LIBRARY)
在 ~/math 目录下,执行 ndk-build
命令,参数如下:
$ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
或:
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk
NDK_PROJECT_PATH 指定了需要编译的代码的工程目录,这里给出的是当前目录,APP_BUILD_SCRIPT给出的是Android makefile文件的路径,当然,如果你还有 Application.mk 文件的话,则可以添加NDK_APP_APPLICATION_MK=./Application.mk
执行完ndk-build
命令后,你会发现当前目录下,生成了 obj 和 libs 文件夹,这样,你的libdmath.so动态库就已经制作完成了,在 libs/armeabi 目录下。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Android NDK开发之:配置环境的详解
一.Windows:Windows下的开发环境需要安装以下软件:Java JDK Apache ANT Build SystemAndroid SDKCygwinAndroid NDKEclipse IDE1.安装Java JDKhttp://www.oracle.com/technetwork/java/javase/downloads/index.html配置环境变量:新建一个JAVA_HOME键,值设为JDK的安装目录.打开PATH键,在末尾增加 ;%JAVA_HOME%\bin检测:ja
-
Android NDK开发入门
神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理,通过在线视频教育网站,我初步了解了NDK的神秘面纱,好东西自然要分享,接下来我们就一起来认识一下Android NDK开发. 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三
-
NDK 数据结构之队列与栈等的实现
NDK 数据结构之队列与栈等的实现 com_tz_ndk_cpp_NDKCpp.h /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_tz_ndk_cpp_NDKCpp */ #ifndef _Included_com_tz_ndk_cpp_NDKCpp #define _Included_com_tz_ndk_cpp_NDKCpp #ifdef __cp
-
Android NDK 生成以及调用so 文件
1.使用NDK来生成so文件: hello-jni.c 函数名Java +包名+函数名字 2.修改Android.mk文件 LOCAL_SRC_FILES :=hello-jni.c 指定c++文件 3.编译so文件 4.调用so文件 so文件copy到android项目的libs/armeabi目录下 最后输出一下结果: 以上就是本篇文章对Android JNI开发流程的梳理,希望可以帮助开发 JNI的朋友.
-
Android开发的IDE、ADT、SDK、JDK、NDK等名词解释
1. IDE: Intelligent Development Environm的简称.即智能开发环境.是一种开发工具.常用的IDE有adt-bundles和Android studio.两个都需要配置jdk. 2. ADT: Android Development tools的简称.即Android开发工具.ADT为Eclipse的插件.在Eclipse和SDK之间起了一个桥梁的作用. 3. SDK: Soft Development Kit的简称.软件开发工具包.在Android中,它为开发
-
Android 驱动编写LED-NDK程序
1. 首先编写LINUX内核模块LED #include <linux/kernel.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/slab.h> #include <linux/device.h> #include <asm/io.h> #include <asm/uaccess.h> #include <linux/cdev.
-
Android NDK开发详细介绍
Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言.但这并不等同于"第三方应用只能使用Java".在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,"Java+C"的
-
Android NDK开发的环境搭建与简单示例
一.NDK与JNI简介 NDK全称为native development kit本地语言(C&C++)开发包.而对应的是经常接触的Android-SDK,(software development kit)软件开发包(只支持java语言开发). 简单来说利用NDK,可以开发纯C&C++的代码,然后编译成库,让利用Android-SDK开发的Java程序调用.NDK开发的可以称之为底层开发或者jni(java native interface)层开发,SDK开发可以称为上层开发. Andro
-
Android NDK开发简单程序分享(Hello Word!)
在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android程序,首先你必须了解C语言.JAVA语言以及Linux操作系统,这样可以帮助你开始上手,当然不是说你必须是大牛才能进行NDK开发,下面我们来一起实现一个简单的NDK程序. 第一步,创建Android工程 打开开发环境eclipse,在左侧空白区域,右键单击创建Android工程(非常简单,不再赘述)
-
android开发实践之ndk编译命令简单示例
前言 Android提供了NDK工具,用来编译native代码(c/c++),该工具配置好了相关的交叉编译环境和工具链,只需要你简单地编写几个.mk文件即可将你的c/c++代码编译为Android的java工程/Android手机可以识别.加载和运行的库或者应用程序. 默认情况下,使用NDK编译c/c++代码,需要将该代码放置到任一个Android应用工程的jni目录下,然后编写相应的Android.mk文件,并执行ndk-build命令完成编译.其实你也是可以在任意目录下去编译native代码
-
Android开发之开关按钮控件ToggleButton简单用法示例
本文实例讲述了Android开发之开关按钮控件ToggleButton简单用法.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: res/layout/activity_main.xml文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo
-
Android开发实现跟随手指的小球效果示例
本文实例讲述了Android开发实现跟随手指的小球效果.分享给大家供大家参考,具体如下: 配置DrawView类用于绘制小球 public class DrawView extends View { public float currentX = 40; public float currentY = 50; //定义并创建画笔 Paint p = new Paint(); public DrawView(Context context) { super(context); } public D
-
Android开发之计算器GridLayout布局实现方法示例
本文实例讲述了Android开发之计算器GridLayout布局实现方法.分享给大家供大家参考,具体如下: 运行效果: Demo 下载地址:https://github.com/LonglyWolf/Calculator 或者点击此处本站下载. 按钮布局实现: 一个Linearlayout 嵌套三个TextView 最下方的显示当前计算式.上面为先前的计算式. Gridview 网格布局排布按钮 <?xml version="1.0" encoding="utf-8&q
-
Android开发实现自定义水平滚动的容器示例
本文实例讲述了Android开发实现自定义水平滚动的容器.分享给大家供大家参考,具体如下: public class HorizontalScrollView extends ViewGroup { //手势 private GestureDetector mGestureDetector; private HorizontalScroller mScroller; private int curID; //快速滑动 private boolean isFlying; //--回调函数-----
-
Android开发实现Files文件读取解析功能示例
本文实例讲述了Android开发实现Files文件读取解析功能.分享给大家供大家参考,具体如下: package com.example.file; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widg
-
Android开发之选项卡功能的实现方法示例
本文实例讲述了Android选项卡功能的实现方法.分享给大家供大家参考,具体如下: 选项卡(TabHost)方便的在窗口上设置多个标签页,每个标签页相当于获得一个与外部容器相同大小的组件摆放区域 通过这种方式,可以在一个容器中放置多组件. 创建4个java文件并对应layout 创建主java ,代码 package lianxi; import com.example.jichu_lianxi.R; import android.app.TabActivity; import android.
-
Android开发实现带清空按钮的EditText示例
本文实例讲述了Android开发实现带清空按钮的EditText.分享给大家供大家参考,具体如下: 一.效果图: 二.具体代码: import android.content.Context; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.support.v4.graphics.drawable.DrawableCompat; i
-
Android开发实现的标准体重计算器功能示例
本文实例讲述了Android开发实现的标准体重计算器功能.分享给大家供大家参考,具体如下: 运行结果界面: 界面设计 <RelativeLayout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" and
-
Android开发实现自动切换文字TextSwitcher功能示例
本文实例讲述了Android开发实现自动切换文字TextSwitcher功能.分享给大家供大家参考,具体如下: 介绍: 1.TextSwitcher是ViewSwicher的一个子类,继承了ViewSwicher的所有方法 2.与ViewSwitcher的另一个子类类似,TextSwitcher也有 3.ImageSwitcher不同的是:TextSwitcher的ViewFactory方法的 makeVieW() 必须放回一个TextXiew组件. 具体效果: 放射思维: 如果将其和轮播图(h
随机推荐
- Lua字符串模式匹配函数小结
- UITableView中Cell重用机制导致内容重复的解决方法
- asp Fix、Int、Round、CInt函数使用说明
- YUI模块开发原理详解
- mysql获得60天前unix时间思路及代码
- 使用Node.js处理前端代码文件的编码问题
- js禁用和激活input表单的方法
- C语言堆栈入门指南
- jQuery中:visible选择器用法实例
- C#中Action和Func的区别
- javascript关于继承解析
- Android开发VR实战之播放360度全景视频
- js实现Select列表各项上移和下移的方法
- C#获得文件属性信息的实现方法
- c++ dynamic_cast与static_cast使用方法示例
- php中导出数据到excel时数字变为科学计数的解决方法
- Python设计模式之工厂模式简单示例
- Python各类图像库的图片读写方式总结(推荐)
- Vue实现搜索 和新闻列表功能简单范例
- Ubuntu 18.04上安装Apache、MySQL、PHP、LAMP的完整教程