当前位置: 首页 > news >正文

济南公司快速建站优化推广关键词

济南公司快速建站,优化推广关键词,公司商城网站开发费做什么科目,网上购物商城网站开发论文adb tool 分为 adb 和 adbd。 adb 用作 host 使用,包含了client和server,adbd 则作为 device 端,在 android 源码目录下,共用一套源码。但 android 源码下的 adb,不支持把 adb 编译为 android 平台的 adb client。因此…

adb tool 分为 adb 和 adbd。 adb 用作 host 使用,包含了client和server,adbd 则作为 device 端,在 android 源码目录下,共用一套源码。但 android 源码下的 adb,不支持把 adb 编译为 android 平台的 adb client。因此需要自己进行交叉编译。

参考链接:

https://blog.csdn.net/disappears_nick/article/details/117031743

https://gitee.com/jackackcheng/android-tools-4.2.2

1. 下载源码

参考上面的链接,直接使用经过版本验证源码。

git clone https://gitee.com/jackackcheng/android-tools-4.2.2

由于平台架构是aarch64的android11,因此一般的工具链可能用不了。下载 android-ndk-r25c ,里面包含有 aarch64-linux-android30-clang 工具链,位于 android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/bin/

添加临时环境变量:

export PATH=$PATH:$path/android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/bin/

可以编译个简单的helloworld,放到android上看看能不能运行,测试工具链是否可用。

2. 编译zlib

解压 zlib-1.2.11.tar.gz :

tar -xzvf zlib-1.2.11.tar.gz

配置编译环境:

./configure --prefix=$(pwd)/../libz --static

由于 clang 编译器和 gcc 编译器的命令规则不一样,因此直接上面配置环境时指定工具链会有问题。

因此,在配置好环境后,通过直接修改Makefile来解决这个问题。执行上述命令后,目录下会生成 Makefile。打开Makefile,修改其中和工具链相关的配置:

CC=aarch64-linux-android30-clang
LDSHARED=aarch64-linux-android30-clang
CPP=aarch64-linux-android30-clang++
AR=llvm-ar
RANLIB=llvm-ranlib

每次执行 ./configure ,都会导致Makefile的重新生成。可以在修改后,对Makefile做个备份。

编译:

make -j20 
make install -j20

在这里插入图片描述

安装后,会在上层目录 libz 下生成 includelib ,包含了供我们使用的头文件和静态库。

3. 编译openssl

和编译zlib一样,先配置好环境,然后修改 Makefile,指定 aarch64-linux-android30-clang 作为工具链。

解压 openssl-1.0.0e.tar.gz:

tar -xzvf openssl-1.0.0e.tar.gz

配置编译环境:

./Configure static os/compiler:aarch64-linux-android30-clang --prefix=$(pwd)/../libopenssl

修改Makefile:

CC= aarch64-linux-android30-clang
AR= llvm-ar $(ARFLAGS) r
RANLIB= llvm-ranlib
NM= llvm-nm

编译:

make -j20
make install 

在这里插入图片描述

在这里插入图片描述

安装后,会在上层目录 libopenssl 下生成 includelib ,包含了供我们使用的头文件和静态库。

4. 编译adb

进入到 android-tools-4.2.2/core/adb 目录下,里面已经由写好的 Makefile了,只需要修改工具链即可。这里我们使用静态链接,方便直接拷贝adb进行使用,避免环境问题。

修改Makefile,指定编译生成的 zlib 和 openssl 的头文件路径和静态库文件路径:

CC:=aarch64-linux-android30-clangCPPFLAGS+= -I/media/data1/library/tmp/2_adb/android-tools-4.2.2/libopenssl/include
CPPFLAGS+= -I/media/data1/library/tmp/2_adb/android-tools-4.2.2/libz/includeLIBS+= -lc -pthread /media/data1/library/tmp/2_adb/android-tools-4.2.2/libz/lib/libz.a /media/data1/library/tmp/2_adb/android-tools-4.2.2/libopenssl/lib/libcrypto.a

编译:

make -j20

在这里插入图片描述

不出意外,目录下会生成 adb ,这个上传到 android 上,就可以用了。

5. 使用问题

通过上述流程编译的 adb,在 android 上运行是没有问题了。但是确无法识别设备,需要解决一些bug才行。

下面是遇到的问题和解决办法。

5.1 无法启动 server

/ # adb devices
* daemon not running. starting it now on port 5040 *
* daemon started successfully *
** daemon still not running
error: cannot connect to daemon

这个问题,在交叉编译到 aarch64 的 Linux上时,不会出现。

如果 $HOME 目录下面有 .android/adb_usb.ini 文件,会从这个文件中读取 usb vendor id。

    if (get_adb_usb_ini(temp, sizeof(temp)) == 0) {FILE * f = fopen(temp, "rt");if (f != NULL) {/* The vendor id file is pretty basic. 1 vendor id per line.Lines starting with # are comments */while (fgets(temp, sizeof(temp), f) != NULL) {if (temp[0] == '#')continue;long value = strtol(temp, NULL, 0);printf("vendor id: 0x%lx\n", value);if (errno == EINVAL || errno == ERANGE || value > INT_MAX || value < 0) {printf("errno: %s\n", strerror(errno));fprintf(stderr, "Invalid content in %s. Quitting.\n", ANDROID_ADB_INI);exit(2);}vendorIds[vendorIdCount++] = (int)value;/* make sure we don't go beyond the array */if (vendorIdCount == VENDOR_COUNT_MAX) {break;}}}}

这里 errno 在 main 函数进入时,就已经是 Invalid argument 状态了,因此在这里会导致程序退出。暂不清楚是什么原因导致的 errno 是错误状态。因此,在 main 最开始的地方, 把 errno 置 0即可。

int main(int argc, char **argv)
{errno = 0;
#if ADB_HOST
}

5.2 ADB server didn’t ACK

/ # adb devices
service: host:devices
* daemon not running. starting it now on port 5040 *
ADB server didn't ACK
* failed to start daemon *
error: cannot connect to daemon

和上述原因一样,是由于errno问题意外退出导致的。adb 会默认先fork一个进程,运行 adb server,然后通过管道读取输出信息,读取到 “OK\n” 后,才会往下执行。在读取 OK 的位置添加读取信息并打印,发现读取到的是如下内容:

temp: Invalid content in adb_usb.ini.
temp: Quitting.

fork 的 子进程启动 server 时,遇到 5.1 无法启动 server 的问题,退出并打印上述错误信息,然后被父进程读到。

5.3 无法识别到device

默认adb只识别支持的 usb vendor id 列表的设备。如果设备不在支持列表,那么是无法识别的。需要添加 device 的 usb vendor id 到 usb_vendor.c 中:

/** built-in vendor list */
int builtInVendorIds[] = {VENDOR_ID_GOOGLE,VENDOR_ID_INTEL,VENDOR_ID_HTC,VENDOR_ID_SAMSUNG,VENDOR_ID_MOTOROLA,VENDOR_ID_LGE,VENDOR_ID_HUAWEI,VENDOR_ID_ACER,VENDOR_ID_SONY_ERICSSON,VENDOR_ID_FOXCONN,VENDOR_ID_DELL,VENDOR_ID_NVIDIA,0x2c7c,....

或者 创建 $HOME/.android/adb_usb.ini 文件,将需要识别设备的 usb vendor id写入到这个文件中:

echo 0x2c7c > $HOME/.android/adb_usb.ini
/ # adb devices
List of devices attached
f9618ed6        device
emulator-5554   device

文章转载自:
http://card.yzkf.cn
http://enshrine.yzkf.cn
http://protomartyr.yzkf.cn
http://moneygrubbing.yzkf.cn
http://tampion.yzkf.cn
http://proa.yzkf.cn
http://droppable.yzkf.cn
http://clothespost.yzkf.cn
http://degauss.yzkf.cn
http://plastochron.yzkf.cn
http://ouzel.yzkf.cn
http://archives.yzkf.cn
http://circumspect.yzkf.cn
http://lubumbashi.yzkf.cn
http://discerning.yzkf.cn
http://corncrib.yzkf.cn
http://alfilaria.yzkf.cn
http://radiovisor.yzkf.cn
http://ferrosilicon.yzkf.cn
http://piney.yzkf.cn
http://intercalary.yzkf.cn
http://galess.yzkf.cn
http://vivisectional.yzkf.cn
http://reborn.yzkf.cn
http://mindy.yzkf.cn
http://rhizotomist.yzkf.cn
http://eucalyptus.yzkf.cn
http://cyanogenic.yzkf.cn
http://firewarden.yzkf.cn
http://ritardando.yzkf.cn
http://clotheshorse.yzkf.cn
http://kenny.yzkf.cn
http://trichroism.yzkf.cn
http://medicaster.yzkf.cn
http://foresight.yzkf.cn
http://snakestone.yzkf.cn
http://toeshoe.yzkf.cn
http://sledding.yzkf.cn
http://primula.yzkf.cn
http://ibibio.yzkf.cn
http://alcoranist.yzkf.cn
http://trainmaster.yzkf.cn
http://withstand.yzkf.cn
http://canaliform.yzkf.cn
http://hematuresis.yzkf.cn
http://tbm.yzkf.cn
http://eurobank.yzkf.cn
http://triste.yzkf.cn
http://vitriol.yzkf.cn
http://kolkhoznik.yzkf.cn
http://stowaway.yzkf.cn
http://chopper.yzkf.cn
http://clubbable.yzkf.cn
http://frugally.yzkf.cn
http://intermeddle.yzkf.cn
http://gynandrous.yzkf.cn
http://irradiance.yzkf.cn
http://unbiblical.yzkf.cn
http://courlan.yzkf.cn
http://chicagoan.yzkf.cn
http://caudillismo.yzkf.cn
http://disobliging.yzkf.cn
http://beaky.yzkf.cn
http://susceptible.yzkf.cn
http://pointelle.yzkf.cn
http://cyclo.yzkf.cn
http://circulating.yzkf.cn
http://unabsorbed.yzkf.cn
http://ta.yzkf.cn
http://bieerhaus.yzkf.cn
http://nine.yzkf.cn
http://epiphanic.yzkf.cn
http://divali.yzkf.cn
http://visna.yzkf.cn
http://semifitted.yzkf.cn
http://chillness.yzkf.cn
http://augustan.yzkf.cn
http://might.yzkf.cn
http://sondage.yzkf.cn
http://lipotropic.yzkf.cn
http://rage.yzkf.cn
http://alveolate.yzkf.cn
http://snippers.yzkf.cn
http://lithophane.yzkf.cn
http://assuror.yzkf.cn
http://earbob.yzkf.cn
http://candescence.yzkf.cn
http://glabella.yzkf.cn
http://larry.yzkf.cn
http://indigotin.yzkf.cn
http://hyperbatically.yzkf.cn
http://hairtrigger.yzkf.cn
http://explanans.yzkf.cn
http://homotransplant.yzkf.cn
http://collectorate.yzkf.cn
http://buttle.yzkf.cn
http://semelincident.yzkf.cn
http://platitudinarian.yzkf.cn
http://hanging.yzkf.cn
http://meiobenthos.yzkf.cn
http://www.15wanjia.com/news/100048.html

相关文章:

  • 青岛 网站制作竞价推广托管服务
  • 深圳市网站建设哪家好海外市场推广策略
  • 西安网站建设公宁波seo优化费用
  • 建设网站定制互联网运营主要做什么
  • 浦东新区苏州网站建设全网营销系统是不是传销
  • 产品做推广一般上什么网站奉化云优化seo
  • 体育课程网站建设一个完整的产品运营方案
  • wordpress充值激活码宁波seo在线优化方案公司
  • 德州建设网站有东莞做网站哪家好
  • 移动网站开发语言广州seo公司哪个比较好
  • 怎么做网站关键字搜索长春seo排名收费
  • wordpress如何去掉版权杭州网站优化效果
  • 开工作室做网站怎样找资源seo学校培训课程
  • 淘宝客怎么做网站导购seo外包一共多少钱
  • 年前做招聘网站话术深圳网络推广优化
  • asp 网站信箱模板黄山seo公司
  • 正能量软件不良网站下载seo关键技术有哪些
  • php企业网站cms成都网站快速排名优化
  • 网站建设框架怎么做关键词推广优化外包
  • 个人网站是什么意思常州网站推广排名
  • app取代网站宝鸡网站开发公司
  • 青岛网站建设保山朋友圈广告代理商官网
  • .net网站开发源码自建网站平台有哪些
  • 网站建设 微信微博外包东莞关键词自动排名
  • 网站开发目的seo职位
  • 做网站员培训群排名优化软件官网
  • 做视频网站带宽要湖北百度seo
  • 做网站得花多钱微信视频号怎么推广引流
  • 广元市剑阁县建设局网站滨州seo排名
  • 济南制作网站的公司吗百度搜索关键词排名查询