arm平台编译adb

参考github:https://github.com/bonnyfone/adb-arm

        本来的目的是在arm平台编译以后能够使用adb shell获取shell权限,然后就可以避开其他权限无法执行su的问题。

最开始,先修改了android源码中的su.c,将root和shell权限验证部分注释掉,编译出来还是不行,在setgid和setuid的时候会产生错误,这个错误折腾了我两天也没搞定,只能另找办法了。

突然想到adb是有shell权限的,可以自己编译adb为动态库,通过jni方式给android应用调用,这样在已经root的手机上就能有root权限了(没有root的平台就需要再研究一下如何root),目前这个方法还未验证。

提供adb编译的方法(这个方法只是编译可执行文件adb,可以在这个基础上修改为动态库方式,这个方式比较简单,就不在这里说明了):

编译版本是:android-4.4.4_r2.0.1

源码的下载需要梯子……

脚本文件:

#         CONFIG
# -------------------------

# Branch to checkout from Android source code repo
branch=android-4.4.4_r2.0.1

# Makefile to use (will be automatically copied into system/core/adb)
makefile=makefile.sample


# DOWNLOAD necessary files
# -------------------------
echo "\n>> >>> ADB for ARM <<< \n"
echo "\n>> Downloading necessay files ($branch branch)\n"
mkdir android-adb
cd android-adb
mkdir system
cd system
git clone -b $branch https://android.googlesource.com/platform/system/core
git clone -b $branch https://android.googlesource.com/platform/system/extras
cd ..
mkdir external
cd external
git clone -b $branch https://android.googlesource.com/platform/external/zlib
git clone -b $branch https://android.googlesource.com/platform/external/openssl
git clone -b $branch https://android.googlesource.com/platform/external/libselinux
cd ..


# MAKE
# -------------------------
echo "\n>> Copying makefile into system/core/adb...\n"
cp ../$makefile system/core/adb/makefile -f
cd system/core/adb/
echo "\n>> Make... \n"
make clean
make
echo "\n>> Copying adb back into current dir...\n"
cp adb ../../../../
echo "\n>> FINISH!\n"

makefile.example文件:

# ADB makefile
# ------------

#TODO change TOOLCHAIN variable to your toolchain path 
#TOOLCHAIN= /opt/poky/1.5/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-
TOOLCHAIN = /home/linux/bin/android-toolchain/bin/arm-linux-androideabi-
CC = $(TOOLCHAIN)gcc
LD = $(TOOLCHAIN)gcc
CXX = $(CC)

SRCS += adb.c
SRCS += fdevent.c
SRCS += adb_client.c
SRCS += commandline.c
SRCS += console.c
SRCS += file_sync_client.c
SRCS += get_my_path_linux.c
SRCS += services.c
SRCS += sockets.c
SRCS += transport.c
SRCS += transport_local.c
SRCS += transport_usb.c
SRCS += usb_linux.c
SRCS += usb_vendors.c
SRCS += adb_auth_host.c
 
VPATH += ../libcutils
SRCS += list.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
SRCS += load_file.c
 
VPATH += ../libzipfile
SRCS += centraldir.c
SRCS += zipfile.c
 
VPATH += ../../../external/zlib/src
SRCS += adler32.c
SRCS += compress.c
SRCS += crc32.c
SRCS += deflate.c
SRCS += infback.c
SRCS += inffast.c
SRCS += inflate.c
SRCS += inftrees.c
SRCS += trees.c
SRCS += uncompr.c
SRCS += zutil.c

CPPFLAGS += -DADB_HOST=1
CPPFLAGS += -DHAVE_FORKEXEC=1
CPPFLAGS += -DHAVE_SYMLINKS
CPPFLAGS += -DHAVE_TERMIO_H
CPPFLAGS += -DHAVE_SYS_SOCKET_H
CPPFLAGS += -D_GNU_SOURCE
CPPFLAGS += -D_XOPEN_SOURCE
CPPFLAGS += -std=c++11 
CPPFLAGS += -I.
CPPFLAGS += -I../include
CPPFLAGS += -I../../../external/zlib
CPPFLAGS += -I../../../external/openssl/include
CPPFLAGS += -I../base/include 
CFLAGS += -O2 -g -Wall -Wno-unused-parameter

LIBS = -lcrypto -pthread -fPIE -pie
#LIBS += -lrt

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

all: adb

adb: $(OBJS)
	$(LD) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)

clean:
	rm -rf $(OBJS)
TOOLCHAIN是本地的ndk工具链,是从r9中抽取出来的。

可以手动下载脚本中的源代码,然后直接把makefile放在~/system/core/adb/下面,执行make就能产生adb文件,验证没有问题。动态库还没来得及编译。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Yocto中编译ADB源代码,您可以按照以下步骤进行操作: 1. 在您的Yocto项目中,找到您要编译的目标机器的配置文件(例如MACHINE=qemuarm)。 2. 在您的构建环境中,安装adbandroid-tools软件包。您可以使用以下命令进行安装: ``` $ sudo apt-get update $ sudo apt-get install adb android-tools ``` 3. 在您的Yocto项目中,将meta-android仓库添加到您的bblayers.conf文件中。您可以使用以下命令进行添加: ``` $ bitbake-layers add-layer meta-android ``` 4. 在您的local.conf文件中,将以下内容添加到末尾: ``` # Enable ADB IMAGE_INSTALL_append = " adb" ``` 5. 克隆ADB源代码到您的Yocto项目中。您可以使用以下命令进行克隆: ``` $ cd /path/to/your/yocto/project/ $ git clone https://android.googlesource.com/platform/system/core.git ``` 6. 在您的Yocto项目中,创建一个新的recipe文件(例如adb.bb)并将以下内容添加到文件中: ``` DESCRIPTION = "Android Debug Bridge (ADB)" SECTION = "console/network" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1" SRC_URI = "file://core/adb/adb.c \ file://core/adb/adb.h \ file://core/adb/commandline.c \ file://core/adb/transport.c \ file://core/adb/transport_local.c \ file://core/adb/transport_usb.c \ file://core/adb/transport_usb.h \ file://core/adb/usb_linux.c \ file://core/adb/usb_vendors.c" S = "${WORKDIR}" CFLAGS_append = " -DADB_HOST=0 -Wno-unused-function" do_compile() { ${CC} ${CFLAGS} ${LDFLAGS} -Icore/adb -o adb core/adb/adb.c core/adb/commandline.c core/adb/transport.c core/adb/transport_local.c core/adb/transport_usb.c core/adb/usb_linux.c core/adb/usb_vendors.c -lcrypto -lpthread -lrt -lm } do_install() { install -d ${D}${bindir} install -m 0755 adb ${D}${bindir}/adb } ``` 7. 构建您的Yocto项目。您可以使用以下命令进行构建: ``` $ bitbake core-image-minimal ``` 8. 如果构建成功,您可以在生成的文件系统中找到adb二进制文件。如果您的目标机器是ARM架构,它应该在以下路径中: ``` /usr/bin/arm-poky-linux-gnueabi/adb ``` 请注意,这只是一个大概的指南,因为ADB编译过程可能因不同的Yocto版本和目标机器而有所不同。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值