常用指令--自用

文章介绍了使用ninja、python脚本进行Android编译,以及adr2line指令定位二进制文件地址的过程,同时展示了CHI-CDK推库脚本adbpush用于在设备上安装共享库的方法。
摘要由CSDN通过智能技术生成

ninja指令:

./prebuilts/build-tools/linux-x86/bin/ninja -j32 -f out/combined-PROJECT.ninja camera.qcom

bin文件编译:

./prebuilts/python/linux-x86/2.7.5/bin/python ./vendor/qcom/proprietary/chi-cdk/tools/buildbins/buildbins.py --bin-path=../camerabin --target=bin --yaml-file-name=buildbins_PROJECT.yaml

adr2line指令:

prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -C -f -e {XXX.so}  {address}

编译boot.img指令

/bin/bash -c "(out/host/linux-x86/bin/mkbootimg                                                                   \
              --kernel out/target/product/XXX/kernel                                                              \
              --ramdisk out/target/product/XXX/ramdisk.img                                                        \
              --os_version 14                                                                                     \
              --os_patch_level 1970-01-01                                                                         \
              --kernel_offset 0x0000000                                                                           \
              --second_offset 0x8800                                                                              \
              --ramdisk_offset 0x3300000                                                                          \
              --dtb_offset 0x3000000                                                                              \
              --header_version 4                                                                                  \
              --dtb device/XXXX/XXX/prebuilt/XXXX.dtb                                                             \
              --output out/target/product/XXX/boot.img )                                                          \
              &&                                                                                                  \
                  (size=\$(for i in out/target/product/XXX/boot.img;                                              \
                              do stat -c \"%s\" \"\$i\" | tr -d '\\n';                                            \
                              echo +; done; echo 0);                                                              \
                   total=\$(( \$( echo \"\$size\" ) ));                                                           \
                   printname=\$(echo -n \"out/target/product/XXX/boot.img\" | tr \" \" +);                        \
                   maxsize=\$((   0x08000000-69632));                                                             \
                   if [ \"\$total\" -gt \"\$maxsize\" ];                                                          \
                       then echo \"error: \$printname too large (\$total > \$maxsize)\"; false;                   \
                   elif [ \"\$total\" -gt \$((maxsize - 32768)) ];                                                \
                       then echo \"WARNING: \$printname approaching size limit (\$total now; limit \$maxsize)\";  \
                   fi )                                                                                           \
              &&                                                                                                  \
                  (out/host/linux-x86/bin/avbtool add_hash_footer                                                 \
                  --image out/target/product/XXX/boot.img                                                         \
                  --partition_size 0x08000000                                                                     \
                  --partition_name boot                                                                           \
                  --prop com.android.build.boot.os_version:14                                                     \
                  --prop com.android.build.boot.fingerprint:\$(cat out/target/product/XXX/build_fingerprint.txt) )"

CHI-CDK推库脚本:

__PROJECT_NAME__ = "PROJECT/"

import os

sharedLibraryLocalPaths = []
sharedLibraryPhonePaths = []
sharedLibraryName = []

def read_file(filePath):
    fileLogObject = open(filePath, 'r')
    fileLogLines = fileLogObject.readlines()

    for fileLine in fileLogLines:
        if "Install: " in fileLine:
            # [ 52% 2302/4345] Install: out/target/product/Pong/vendor/lib/camera/com.qti.eeprom.XXX.so

            temp = fileLine.split("Install: ")                                                      # ['[ 52% 2302/4345]' , 'out/target/product/Pong/vendor/lib/camera/com.qti.eeprom.XXX
            sharedLibraryLocalPaths.append(temp[1].split())                                                 # 'out/target/product/Pong/vendor/lib/camera/com.qti.eeprom.XXX.so
            sharedLibraryPhonePaths.append(temp[1].split(__PROJECT_NAME__)[1].split())                      # 'vendor/lib/camera/com.qti.eeprom.XXX.so\n'
            #sharedLibraryName.append(temp[1].split(__PROJECT_NAME__)[1].split('/')[-1].split())    # 'com.qti.eeprom.XXX.so'
    fileLogObject.close()

def push_so():
    if (len(sharedLibraryLocalPaths) == len(sharedLibraryPhonePaths)):
        for i in range(len(sharedLibraryLocalPaths)):
            cmd = "adb push " + str(" ".join(sharedLibraryLocalPaths[i])) + "  " + str(" ".join(sharedLibraryPhonePaths[i]))
            os.system(cmd)
        print(str(len(sharedLibraryLocalPaths)) + " file pushed!")
    else:
        print("error: len(sharedLibraryLocalPaths) != len(sharedLibraryPhonePaths)")

if __name__ == '__main__':
    read_file('./1.log')
    push_so()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值