adb移植到Android平台使用

2023-10-26

adb移植到Android平台使用

1、工具源码

所需源码:

openssl:        git clone https://github.com/openssl/openssl.git
zlib-1.2.8:     git clone https://github.com/fmrico/zlib-1.2.8.git
android-tools:  git clone https://git.launchpad.net/~phablet-team/+git/android-tools

2、编译

编译我是使用的Ubuntu16.04 android8.0环境编译的。
将下载的源码都放在android目录下

# souce build/envsetup.sh
# lunch xxx

1、编译openssl库

//cd 到openssl源码目录
# cd openssl-master/ 
# mkdir output
#./config no-asm -shared --prefix=$(pwd)/output
说明:no-asm    在交叉编译过程中不使用汇编代码代码加速编译过程。
     -shared   生成动态链接库。
     --prefix  指定安装编译生成文件的路径,如不指定则默认为当前目录。

//修改Makefile
//1、将根目录下Makefile中1723行 “CROSS_COMPILE=” 改为: “CROSS_COMPILE=aarch64-linux-android-”
//2、找到Makefile中有 “-m64” 的地方,全删了(共2处,1757/1758行)。

#make -j24

//编译过程中大概都是会报错,在报错信息中可以看到,链接交叉编译器.so系统库、.h头文件位置。源码版本位置不同,大致都是如下目录
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9x

//将缺失的.h头文件、so库copy到上面目录,缺失的文件可以从NDK源码中找到。目录如下,如果不同可以在prebuilts目录下搜索缺失的.h文件,在arm64下都可以使用
prebuilts\ndk\r10\platforms\android-23\arch-arm64\usr\

#cp -r prebuilts/ndk/r10/platforms/android-23/arch-arm64/usr/include/* prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/include/
#cp -r prebuilts/ndk/r10/platforms/android-23/arch-arm64/usr/lib/* prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/

//然后再次编译
#make -j24

//编译完成后生成:libcrypto.so、libssl.so,拷贝到交叉编译器.so系统库位置,头文件拷贝到交叉编译器.h系统头文件位置
#cp libcrypto.so libssl.so ../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/
#cp -r include/* ../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/include/

2、编译zlib-1.2.8库

//cd 到源码目录
#cd zlib-1.2.8/

#mkdir output
#./configure --prefix=$(pwd)/output

//修改Makefile
//1、添加 TOOLSCHAIN=aarch64-linux-android-
//2、将 CC=gcc 改为 CC=$(TOOLSCHAIN)gcc
//3、将所有 gcc 改为 $(CC)  (共两处,30/31行)
//4、将 
       AR=ar
       RANLIB=ranlib
     改为:
       AR=$(TOOLSCHAIN)ar                                                                                                                                                                                                                                                                                                                                                                                                  
       RANLIB=$(TOOLSCHAIN)ranlib

//编译
#make -j24

//将so库copy到系统编译器目录
#cp libz.so ../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/

3、编译adb

//cd 到源码
#cd android-tools/

#cp debian/makefiles/adb.mk core/adb/
#cd core/adb
#mv adb.mk Makefile

//修改Makefile
CC=aarch64-linux-android-gcc
VPATH+= ../adb
SRCS+= adb.c
SRCS+= console.c
SRCS+= transport.c
SRCS+= transport_local.c
SRCS+= transport_usb.c
SRCS+= commandline.c
SRCS+= adb_client.c
SRCS+= adb_auth_host.c
SRCS+= sockets.c
SRCS+= services.c
SRCS+= file_sync_client.c
SRCS+= get_my_path_linux.c
SRCS+= usb_linux.c
SRCS+= usb_vendors.c
SRCS+= fdevent.c

VPATH+= ../libcutils
SRCS+= load_file.c
SRCS+= socket_inaddr_any_server.c
SRCS+= socket_local_client.c
SRCS+= socket_local_server.c
SRCS+= socket_loopback_client.c
SRCS+= socket_loopback_server.c
SRCS+= socket_network_client.c

CPPFLAGS+= -DADB_HOST=1
CPPFLAGS+= -DHAVE_FORKEXEC=1
CPPFLAGS+= -DHAVE_SYMLINKS
CPPFLAGS+= -DHAVE_TERMIO_H
CPPFLAGS+= -I.
CPPFLAGS+= -I../adb
CPPFLAGS+= -I../include
CPPFLAGS+= -I../../../external/zlib

LIBS+= -fPIC -pie -fPIE -lc -lcrypto -lz -pthread

OBJS= $(SRCS:.c=.o)

#这里注意,下面缩进是tab键那种→空格,不是····的空格,不然编译会报错
all: adb
adb: $(OBJS)
		$(CC) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)
clean:
		rm -rf $(OBJS) adb

//将 adb_auth_host.c 中以下代码注释掉,编译会报错
BN_copy(n, rsa->n);
pkey->exponent = BN_get_word(rsa->e);
ret = getlogin_r(username, sizeof(username));

//将 adb.h 中端口号修改,防止冲突
#if ADB_HOST_ON_TARGET
/* adb and adbd are coexisting on the target, so use 5038 for adb
 * to avoid conflicting with adbd's usage of 5037
 */
#  define DEFAULT_ADB_PORT 6038
#else
#  define DEFAULT_ADB_PORT 6037
#endif

//编译
#make -j24

3、使用

编译出 adb 文件push到 /system/bin
编译出 libcrypto.so.3 libz.so.1等库,把他们push到和/system/lib64即可。
注:如果运行时提示缺失so库,就在编译出来的文件中找到对应的push到 /system/lib64 下
 
这样就可以在Android目录下运行adb,与从机通信了

参考文章:Android使adb作为host运行在arm64平台

源码和编译后的adb放在github上:https://github.com/HTROldSix/android-adb-tools

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

adb移植到Android平台使用 的相关文章

  • Android 2.1:如何轮询现有蓝牙连接的 RSSI 值?

    我需要知道使用 Android 2 1 手机与远程设备建立蓝牙连接的信号强度 从SDK中 我可以看到我可以在发现远程设备时确定RSSI 但我不知道如何随着时间的推移更新该 RSSI 值 有人可以帮我吗 谢谢 从 SDK 中这是获取 RSSI
  • Android 索引滚动

    http developer android com design building blocks scrolling html http developer android com design building blocks scrol
  • 带有工具栏和 TabLayout 的 ViewPager 高度错误

    我在 AppBarLayout 下方有一个 ViewPager 带有工具栏和 TabLayout 我无法理解为什么加载的片段的高度大于可用空间 即使没有如此大的元素 使选项卡可滚动 这是主要的布局 xml
  • Android 重新启动我的 Activity

    我怎样才能做到这一点 单击按钮 mycontext finish 然后 重新开始 你可以尝试这个 MyActivity finish Intent intent new Intent MyActivity this MyActivity c
  • 根据自定义适配器中的条件更改特定行的背景

    我试图根据从远程服务器上的数据库收到的标志来更改行的背景颜色 在我的代码中 我创建了一个名为 disable 的 ArrayList 其中包含所有已标记的位置 我想将禁用列表中的内容与我的 ListView 中的位置相匹配 我研究了几篇帖子
  • 在 strings.xml 中存储十六进制颜色值

    我正在尝试存储hex colorstrings xml 中我的文本的值 因此所有布局文件都将引用该值 以便能够轻松快速更改项目的所有布局文本 但是我在引用它时遇到了麻烦 Using android textColor FFFFFF 在我的
  • RxJava 相当于 orElse 是什么

    在其他语言的流 函数域中有一个常见的操作 那就是 orElse 它就像一个 if 当当前链没有得到任何结果时 它会更改为备用链 在具有 Maybe 类型的语言中 它基本上会继续 Some 类型的链或更改为 None 类型的 orElse 理
  • 将 Android 应用程序部署到手机:错误:[install_itemfolder_01] 错误 1 ​​Windows

    我已经安装了我可能需要的所有组件 我已经上网两天了 但找不到这个问题的答案 我检查了我的 apache ant javac java JRE JDK Qt 变量一切正常 Qt 喜欢我的所有设置 除了当我尝试将应用程序部署到模拟器或设备时出现
  • 如何将值从 recyclerview 项目传递到另一个活动

    当我们单击 recyclerview 项目时 我试图将 recyclerview 项目中的值传递给另一个活动 这里我使用的是OnItemTouchListener 我从 JSON 检索数据并将其解析为 ArrayList 我保存了5个参数
  • 使用自定义布局时 AlertDialog 按钮不可见

    我想要在弹出窗口中使用自定义布局 所以我使用了警报对话框 由于弹出窗口中的子视图数量是动态决定的 所以我使用了 ScrollView 现在 扭曲来了 当没有剩余空间并且滚动开始运行时 正向和负向按钮将变得不可见 下面是代码 AlertDia
  • 将 SearchView 阈值设置为零

    我在用SearchView在android中 我将适配器设置为搜索视图 但建议弹出框在一个字符后显示 因为我将阈值设置为1 它不接受小于1的数字 如何将阈值设置为零 请喜欢 Google 因为您可能知道 Google Play 的应用程序没
  • Android 日期/时间显示 0 而不是 12

    我想知道下面的代码有什么问题 Assign hour set in the picker c set Calendar HOUR selectedHour c set Calendar MINUTE selectedMinute For a
  • 谷歌gson LinkedTreeMap类转换为myclass

    我知道这个问题以前已经被问过 由于我对java和android的新手技能 我一个多星期都无法解决这个问题 我和我的一位朋友正在开发一个 Android 项目 其中有一些类似的事情 最奇怪的部分是 只有当我从 Google Play 商店下载
  • 如何为自定义视图组实现 Android Accessibility

    我有一个从 ViewGroup 扩展的 CustomViewGroup 其中我有 2 个文本视图和 3 4 个不同的按钮 这些按钮是我从不同的 XML 文件中填充的 我的问题是它似乎无法访问 我最后需要做什么才能看到问题所在 您能给我指点有
  • 在 Android 中下载文件

    我正在使用以下代码在 Android 中下载文件 public class FileDownloadActivity extends Activity ProgressDialog mProgressDialog Called when t
  • android:configChanges 清单文件中不允许错误字符串类型

    这是我的清单文件 其中显示 android configChanges 不允许的错误字符串类型 请帮助我纠正错误 下面是我的清单文件
  • 消费者关闭了输入通道或发生错误。事件=0x8

    D AndroidRuntime 11752 D AndroidRuntime 11752 gt gt gt gt gt gt AndroidRuntime START com android internal os RuntimeInit
  • API 27 中 startActivityForResult 后崩溃

    更新到 API 27 和支持库 27 0 2 后 我突然在 Crashlytics 中得到了很多这样的堆栈跟踪 Fatal Exception java lang IllegalArgumentException at android os
  • 如何将 Bundle 转换为 PersistableBundle?

    API21发布了PersistableBundle https developer android com reference android os PersistableBundle html这是系统出于各种目的而保留的捆绑包 JobSc
  • Phonegap - 自动包含正确的科尔多瓦

    我正在 iOS 和 Android 上开发一个 PhoneGap 应用程序 并使用 git 控制我的 www 目录版本 我知道我的 HTML 文件需要包含正确的 Cordova js 文件 取决于我当前正在开发的平台 当有人在 Androi

随机推荐

  • Spring Boot(二)SpringBoot是如何启动Spring容器源码

    SpringApplication run 调用SpringApplication run启动springboot应用 1 SpringApplication run Application class args 2 使用自定义Spring
  • 使用R语言绘制散点图

    文章目录 学习目标 学习内容 内容小结 学习目标 我们所采用的学习内容来自B站的Lizongzhang老师的R语言的学习分享 今天学习的主要内容是关于 绘制散点图 学习内容 下面是学习的主要内容 直接上代码 大家可以查看视频 我也的注释也比
  • 求阶乘的三种方法

    方法一 递归算法 include
  • 【手把手带你用pid算法控制电机】——(4)串级PID控制电机

    前言 1 该系列教程是基于stm32f103c8t6最小系统板的hal库开发 用最通俗易懂的方式手把手带你学会使用Pid算法的速度环 位置环以及速度位置串级pid 2 出这一期Pid系列教程的想法是前段时间我参加了一个比赛 要用到串级Pid
  • 第1课:三位一体定位法,让写作事半功倍

    做最懂技术的传播者 最懂传播的工程师 课程内容分析 本课程的目标是 通过对一系列问题的梳理 找到适合自己的输出状态 确定与理想输出状态之间存在的差距 以及采取什么办法 减少差距 知识要点 1 受众需要什么 省时间的内容 收敛 看过就走 教你
  • Netty源码剖析之HashedWheelTimer时间轮

    版本信息 JDK1 8 Netty all 4 1 38 Final 时间轮的介绍 我们知道钟表分为很多块 每时钟滴答一次就往前走一个块 而时间轮就是使用这个思想 如下图 上图总共分为8块 每过100ms就往前走一块 然后周而复始 此时 我
  • HC32L130单片机入坑记

    解决问题的思路 经验就可提高工作效率 1 调试中遇到的问题及解决思路 1 程序debug过程中 进入hardware default中断中无限循环 解决办法 运用断点定位到程序debug出错的具体位置 程序最终执行的位置即为程序出错的位置
  • alook浏览器哪个好 夸克浏览器_夸克(Quark)浏览器的安装和使用

    前面的文章 我们大概介绍了一下夸克浏览器的 本片将着重将一下夸克浏览器的使用 下载安装 去夸克的官方网站下载安装包 上传到手机进行安装 去各大应用商店去下载安装 比如小米手机的小米应用商店 华为的华为应用商店 或者第三方的豌豆荚等应用商店去
  • flex & bison 基础概述

    1 前言 限于作者能力水平 本文可能存在谬误 因此而给读者带来的损失 作者不做任何承诺 2 本文目标 简单介绍 flex 和 bison 的基础使用方法 简要分析 flex bison 生成代码的工作流程 3 flex bison 3 1
  • 超详细讲解 H5 移动端适配方案

    目录 REM适配方案 1 前言 2 原理 3 适配代码 4 总结 vw适配方案 1 原理 2 适配代码 3 适配方案对比 1px问题 1 简述 2 代码测试 总结 REM适配方案 1 前言 设计师交付给前端开发一张宽度为750px的视觉稿
  • 重新安装ROG Armoury Crate

    文章目录 使用官方卸载工具卸载奥创 安装奥创 更新奥创之后 Aura Sync 坏了 无法调整灯光 打开 Aura Creator 提示服务运行异常 在任务管理器中随便禁用了几个奥创 Asus的服务后 再次打开 Aura Creator 提
  • 【人工智能】SVM 分类器的设计与应用(QDU)

    人工智能 Astar算法求解8数码问题 QDU 人工智能 利用 搜索的博弈树算法编写一字棋游戏 QDU 人工智能 Fisher 线性分类器的设计与实现 QDU 人工智能 感知器算法的设计实现 QDU 人工智能 SVM 分类器的设计与应用 Q
  • Linux中查看socket状态

    Linux中查看socket状态 cat proc net sockstat 这个是ipv4的 sockets used 137 TCP inuse 49 orphan 0 tw 3272 alloc 52 mem 46UDP inuse
  • 响应式布局(媒体查询+%)

    总结 核心思想 每一个最外层盒子给一个max width 盒子中的内容width全部使用 表示 使用 元素全部写在盒子里 当媒体查询满足情况是display block 注意 精确的是需要一样的 媒体查询相当于if 过渡的动画写在默认样式里
  • 读书笔记-看见未来:改变互联网世界的人们

    作者 余晨 推荐序二 未来从来不会自动地发生 世界正在重新 造物 它既是虚拟意义上的 又同时是实物意义上的 宙斯在假眠 而诸神则各逞其能 时代 曾经刊登过的一篇文章认为 今天的个人计算机革命和互联网之所以成为这样 乃是继承了20世纪60年代
  • LLVM汇编语言指导手册之指令手册

    下面是我对llvm汇编中一些不常用的指令的总结 shl 指令 语法
  • wazuh日志审计--定制规则

    日志审计 定制规则 目录布局 规则集文件夹结构如下所示 在接收到agent传来的日志后 manager会根据 var ossec ruleset decoders里面的各种规则对日志进行处理 提取到了指定字段的值之后再根据 var osse
  • 物理这一块真不好搞,

    研究了一段PHYSX 发现真是寸步难行 英文文档也不是很详细 哎 没人带着的话 还是不搞为好 继续封装软引擎吧 没法干了 心里泼凉泼凉的 哎 咋弄呢 看来只能当个兴趣爱好了 或许用下游戏引擎 看看有没有集成好的
  • TensorFlow 深度学习笔记 Stochastic Optimization

    Stochastic Optimization 转载请注明作者 梦里风林 Github工程地址 https github com ahangchen GDLnotes 欢迎star 有问题可以到Issue区讨论 官方教程地址视频 字幕下载
  • adb移植到Android平台使用

    adb移植到Android平台使用 1 工具源码 所需源码 openssl git clone https github com openssl openssl git zlib 1 2 8 git clone https github c