安卓交叉编译——ndk

下载NDK

The Native Development Kit (NDK)特指Android NDK,是为了服务安卓开发的。通过ndk,安卓也可以使用java之外的native code,如c,c++,甚至c和c++对应的library也可以得以复用,这就大大减少了重复开发。

The Native Development Kit (NDK) is a set of tools that allows you to use C and C++ code with Android, and provides platform libraries you can use to manage native activities and access physical device components, such as sensors and touch input.https://developer.android.com/ndk/guides

java通过 Java Native Interface (JNI)调用native library中的函数。

使用 CMake作为build tool ,也可以使用ndk-build。前者需要CMakeLists.txt来说明如何构建,包括需要链接哪些库,后者则需要Android.mk 等makefile文件。

Android.mk

在jni中,有两个mk文件。其中Android.mk是makefile文件。

makefile的作用之一就是指定编译结果,编译生成(exe,so,a,jar,apk)

编译apk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-subdir-java-files)# 生成hello apkLOCAL_PACKAGE_NAME := helloinclude $(BUILD_PACKAGE)

引入静态库

LOCAL_STATIC_LIBRARIES += libxxxxx

引入动态库

LOCAL_SHARED_LIBRARIES += libxxxxx

头文件

LOCAL_C_INCLUDES = $(INCLUDES)

每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。


#call 是调用一个系统提供的宏函数
# $() 是取值
#:= 是赋值
LOCAL_PATH := $(call my-dir) #宏my-dir 则由Build System提供。返回包含Android.mk的目录路径(即包含Android.mk file文件的目录)。

Application.mk

Application.mk是jni文件夹中的另外一个不可或缺的mk文件。它更为简单,作用是指定编译的平台。

APP_ABI := armeabi
// 最常用的APP_ABI字段:指定需要基于哪些CPU平台的.so文件
// 常见的平台有armeabi x86 mips,其中移动设备主要是armeabi平台
// 默认情况下,Android平台会生成所有平台的.so文件,即同APP_ABI := armeabi x86 mips
// 指定CPU平台类型后,就只会生成该平台的.so文件,即上述语句只会生成armeabi平台的.so文件

安装Cygwin

Cygwin is:Cygwin

  • a large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows.

因为NDK只能在Linux环境下运行,所以如果windows需要使用ndk的话就需要安装Cygwin。但是默认可能很多工具是没有安装的,所以需要在安装的过程中指定一下,安装好make,vim等。
https://zhuanlan.zhihu.com/p/474242350

如果安装成功,双击桌面的快捷方式,会弹出一个终端,输入make -v可以看到make的版本。

在这个终端输入:cd /cygdrive && ls,可以看到主机的几个磁盘盘符,包括挂载的。

d)配置NDK路径
1、 首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:C:\cygwin\home\Administrator\.bash_profile
2、 打开bash_profile文件,添加NDK=/cygdrive/<你的盘符>/ 我的是:NDK=/cygdrive/d/android-ndk-r9b export NDK,并保存 
3、重新打开cygwin,输入cd $NDK,如果输出上面配置的/cygdrive/d/android-ndk-r9b信息,则表明环境变量设置成功了

配置环境变量成功之后,继续在这个终端借助cygdrive切换到代码工程的jni目录下,执行:

$NDK/ndk-build.cmd

即可编译完成。编译结果一般是可执行文件,在jni同级的obj目录下。

下载Android Debug Bridge (adb)

在编译出安卓可执行文件之后,为了方便在电脑端把文件push到手机,并进行调用,就需要用到adb。

Android Debug Bridge (adb) is a versatile command-line tool that lets you communicate with a device. The adb command facilitates a variety of device actions, such as installing and debugging apps. adb provides access to a Unix shell that you can use to run a variety of commands on a device.Android 调试桥 (adb)  |  Android Studio  |  Android Developers

下载地址SDK 平台工具版本说明  |  Android Studio  |  Android Developers,得到一个文件夹,里面有adb.exe,fastboot.exe.

为了使用adb命令,还需要把adb.exe所在文件夹添加到环境变量中,否则会报错:

‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件


reference:

解决‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。_android_weixin_38648367-GitCode 开源社区

Windows下NDK开发环境搭建_windows系统安装ndk-CSDN博客

Windows下Android NDK安装配置-CSDN博客

[转]Android:JNI 与 NDK到底是什么?(含实例教学)_jni ndk-CSDN博客
Android.mk 文件使用解析-CSDN博客
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Numpy】一文向您详细介绍 np.floor()

【Numpy】一文向您详细介绍 np.floor() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;…

基于Python+Django+MySQL+HTML的创新创业平台

DjangoMySQLHTML 基于PythonDjangoMySQLHTML的创新创业平台 用户管理 系统监控 角色管理 资源管理 参数设置 角色管理 简介 学生创新创业平台是一个功能丰富的在线教育或协作系统&#xff0c;支持中文语言环境。它提供用户管理、系统监控、多角色权限控制、资源管理、参…

Linux目录的作用和常用指令

目录结构及其详细作用 / (根目录) Linux文件系统的起点&#xff0c;所有文件和目录都在其下。 /bin 存放系统启动和运行时所需的基本命令&#xff0c;如 ls, cp, mv, rm&#xff0c;这些命令在单用户模式下或系统崩溃时仍然可用。 /boot 包含启动引导加载器的文件和Linux内核…

mac下Xcode在iphone真机上测试运行iOS软件

最近一个需求需要在iPhone真机上测试一个视频直播的项目。 需要解决如何将项目 app 安装到真机上 在进行真机调试。 安装Xcode 直接在App Store上搜索Xcode安装即可。 关键是要安装Simulator。项目需要安装iOS17.5但是由于安装包太大&#xff0c;并且网络不稳定的原因。在Xco…

Databricks超10亿美元收购Tabular;Zilliz 推出 Milvus Lite ; 腾讯云支持Redis 7.0

重要更新 1. Databricks超10亿美元收购Tabular&#xff0c;Databricks将增强 Delta Lake 和 Iceberg 社区合作&#xff0c;以实现 Lakehouse 底层格式的开放与兼容([1] [2])。 2. Zilliz 推出 Milvus Lite 轻量级向量数据库&#xff0c;支持本地运行&#xff1b;Milvus Lite 复…

C++入门 vector介绍及使用

目录 vector的介绍及使用 vector常用接口的介绍及使用 vector的定义 vector iterator 的使用 vector 空间增长问题 vector 增删查改 push_back/pop_back insert & erase & find operator[ ]的遍历 vector的介绍及使用 vector的文档介绍 vector是表示可变大…

Vue使用vue-esign实现在线签名

Vue在线签名 一、目的二、样式三、代码1、依赖2、代码2.1 在线签名组件2.2父组件 一、目的 又来了一个问题&#xff0c;直接让我在线签名&#xff08;还不能存储base64&#xff09;&#xff0c;并且还得上传&#xff0c;我直接***违禁词。 二、样式 初始样式 点击前往组件&am…

C++中如何选择整型类型存储数据?

C中如何选择整型类型存储数据&#xff1f; C提供了大量的整型&#xff0c;应使用哪种类型呢?通常&#xff0c;int被设置为对目标计算机而言最为“自然”的长度。自然长度(natural size)指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型&#x…

金蝶云星空程序员开发快速入门

文章目录 一 前言1.1 学习步骤1.2 学习需知 二、学习金蝶*云星空的步骤2.1 下载金蝶*云星空安装到本地2.2 查看官网的学习资料2.3 如何使用C#进行插件开发2.4 sqlserver的表设计以及存储过程2.5 如何使用python进行插件的开发2.6 第三方程序如何调用金蝶*云星空的数据 三 后记 …

1089 狼人杀-简单版

solution 有两个狼人&#xff0c;其中一个狼人说谎&#xff0c;找到符合该条件的方案。若有多种则输出序号最小的方案&#xff0c;若无方案则输出No Solution。 枚举所以狼人的可能性&#xff0c;找到符合的方案输出并结束。 #include<iostream> using namespace std; …

Flyway 数据库迁移工具详解:安装、配置与使用教程

Flyway 数据库迁移工具详解&#xff1a;安装、配置与使用教程 Flyway 是一个开源的数据库迁移工具&#xff0c;用于管理和自动化数据库的版本控制。它可以与各种关系型数据库配合使用&#xff0c;帮助开发团队在应用程序开发生命周期中轻松处理数据库模式的变更。以下是 Flywa…

【CSS】text-decoration-skip是做什么用的,怎么使用

CSS的text-decoration-skip属性用于定义元素哪些部分的内容需要被文本修饰&#xff08;如下划线、上划线、删除线等&#xff09;所跳过。这可以控制所有该元素或该元素的祖先所绘制的文本修饰线。 text-decoration-skip的工作原理&#xff1a; 以text-decoration-skip: ink;为…

CSRF攻击

改账号和密码 里面有改的账号和密码 我改这个代码的123为456&#xff0c;然后在新的浏览器去执行&#xff0c;然后密码就又被改了 假如黑客知道修改密码的url&#xff0c;那么就危险了 但是也不是随便改 是有前提的&#xff0c;前提是&#xff1a; 1、已经登录了要改密码的…

计算机网络:网络层 - IPv6

计算机网络&#xff1a;网络层 - IPv6 IPv6 数据报IPv6 地址冒号十六进制记法地址分类 IPv4 到 IPv6 过渡双栈协议隧道技术 IPv6 是互联网协议的最新版本&#xff0c;它被设计用来取代现有的 IPv4 协议。这是因为 IPv4 存在一些根本性的限制&#xff0c;而 IPv6 则可以解决这些…

【three.js案例一】智慧星球

直接附上源码: import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;//场景 const scene = new THREE.Scene();const geometry = new THREE.SphereGeometry(50,32,16);console.log(.postion,geometry.attributes.position)…

【吊打面试官系列-Mysql面试题】实践中如何优化 MySQL?

大家好&#xff0c;我是锋哥。今天分享关于 【实践中如何优化 MySQL&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 实践中如何优化 MySQL&#xff1f; 最好是按照以下顺序优化&#xff1a; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1、SQL 语…

python内置函数+lambda函数

文章目录 前言1 类型转换int():将值转换为整数(十进制转换)float():将值转换为浮点数str():将值转换为字符串bool(): 将值转换为布尔值round()函数:四舍五入complex()---用来生成复数,当然复数也可手打,该函数与,int(),float()相比并没有变成复数类型的作用2 进制…

【Linux】基础IO——理解文件系统

1.理解文件系统 1.1.ls与stat 磁盘文件由两部分构成&#xff0c;分别是文件内容和文件属性。 文件内容就是文件当中存储的数据&#xff0c;文件属性就是文件的一些基本信息&#xff0c; 例如文件名、文件大小以及文件创建时间等信息都是文件属性&#xff0c;文件属性又被称…

探索高效存储与快速查找: 深入了解B树数据结构

探索高效存储与快速查找: 深入了解B树数据结构 一、什么是B树二、B树的实现2.1 节点的定义2.2 插入关键字2.3 删除关键字2.4 查找关键字2.5 遍历B树 一、什么是B树 B树&#xff0c;也称为B-tree&#xff0c;是一种多路平衡查找树。它被广泛用于文件系统和数据库之中&#xff0c…

CentOS7服务器中安装openCV4.8的教程

参考链接&#xff1a;Centos7环境下cmake3.25的编译与安装 参考链接&#xff1a;Linux安装或者升级cmake&#xff0c;例子为v3.10.2升级到v3.25.0(自己指定版本) 参考链接&#xff1a;Linux安装Opencv&#xff08;C&#xff09; 一、下载资源 1.下载cmake3.25.0的压缩包&am…