Android开发环境搭建和编译系统

xiaoxiao2021-02-27  164

1 工具使用 1.1 将dos格式的文件转换为unix格式文件 直接执行 dos2unix file 例如: dos2unix InotifyMon/AndroidManifest.xml 1.2 Linux Shell FTP使用 ftp <IP addr> 输入ID和password prompt off // 下载文件到本地 mget * 1.3 Linux命令之sed(Stream Editor)批量替换字符串操作 使用的格式如下: sed -i "s/<oldstring>/<newstring>/g" `grep <oldstring> -rl <path>` 其中,oldstring是待被替换的字符串,newstring是待替换oldstring的新字符串,grep操作主要是按照所给的目录查找oldstring,path表示要查找的目录,譬如./ -i选项是直接在文件中替换,不在终端输出; -r选项是所给的path中的目录递归查找; -l选项是输出所有匹配到oldstring的文件; 1.4 git git clean -dfx git reset --hard repo sync -c -d . git branch --set-upstream-to=origin/<BRANCH> <BRANCH> 2 Java Configuration sudo update-alternatives --config java sudo update-alternatives --config javac sudo update-alternatives --config javah sudo update-alternatives --config jar sudo update-alternatives --config javap sudo update-alternatives --config javadoc Or add the following states to /etc/profile export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin 3 choosecombo和lunch 3.1 Android kernel编译makefile kernel/Android.mk 或者 kernel/AndroidKernel.mk kernel/scripts/kconfig/merge_config.sh 3.2 覆盖Android源代码中的cpp或者Java文件 1) device/<oem>/<soc_platform>/<project>/vendorsetup.sh #!/bin/sh MY_PATH=${PWD} PROJ_PATH="device/<oem>/<soc_platform>/<project>" if [ -f ${MY_PATH}/${PROJ_PATH}/overlay_setup.sh ]; then     chmod a+x ${MY_PATH}/${PROJ_PATH}/overlay_setup.sh fi 2) device/<oem>/<soc_platform>/<project>/overlay_setup.sh #!/bin/sh MY_PATH=${PWD} OVL_PATH="device/<oem>/<soc_platform>/<project>/path/to/overlay" # add shell commands here 3) device/<oem>/<soc_platform>/<project>/device.mk $(shell $(LOCAL_PATH)/overlay_setup.sh) 3.3 Android添加自定义的产品类型 - 参考其它项目生成文件夹:device/<OEM>/<product> - 将产品添加到Lunch编译系统中:device/<OEM>/common/vendorsetup.sh 3.4 TARGET_BUILD_TYPE TARGET_BUILD_TYPE的值为release或者debug,主要控制APP的签名之类,对C++和驱动没有影响 - ApplicationInfo.FLAG_DEBUGGABLE 3.5 Linux ko模块编译脚本 3.5.1 Vendor @ device/<OEM>/common/dlkm/AndroidKernelModule.mk 3.5.2 OEM @ hello.c @ Makefile #no-pic:Position Independent Code, 位置无关代码 obj-m := hello.o PREFIX=Android源码路径-LINUX/android KERNELDIR := $(PREFIX)/out/target/product/<ppp>/obj/KERNEL_OBJ/ PWD :=$(shell pwd) ARCH=arm CROSS_COMPILE=$(PREFIX)/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi- CC=$(CROSS_COMPILE)gcc LD=$(CROSS_COMPILE)ld CFLAGS_MODULE=-fno-pic modules:     make -C $(KERNELDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) modules clean:     rm *.o *.ko *.mod.c *.order *.symvers 3.6 make过程 3.6.1 跟踪编译命令 make -j4 showcommands 2>&1 | tee log.txt 当log.txt中出现/bin/bash -c "..."时,表示下面将要执行的命令 3.6.2 LA bootloader和kernel编译脚本 device/<OEM>/<product>/AndroidBoard.mk [...] include bootable/bootloader/lk/AndroidBoot.mk [...] include kernel/AndroidKernel.mk [...] 3.6.3 编译过程 @ build/core/Makefile -> @ build/tools/releasetools/build_image.py -> BuildVerityTree() - 用来生成dm_verity需要的签名数据 BuildVerityMetadata() - 生成Metadata数据 -> @ system/extras/verity/build_verity_metadata.py -> build_verity_metadata() 3.6.4 如何查找编译错误出现的具体位置 make -j4编译时可能看不到错误原因,此时可以删除-j4重新编译,就可以看到错误了。 4 aarch64-linux-gnu-gcc 4.1 arm-none-linux-gnueabi- Tool chains have a loose name convention like arch[-vendor][-os]-abi.arch is for architecture: arm, mips, x86, i686...vendor is tool chain supplier: apple, noneos is for operating system: linux, none (bare metal)abi is for application binary interface convention: eabi, gnueabi, gnueabihf some illustrations as follows:arm-none-eabi - This tool chain targets for ARM architecture, has no vendor, does not target an operating system and complies with the ARM EABI.arm-none-linux-gnueabi - This tool chain targets the ARM architecture, has no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI. It is used to target ARM-based Linux systems. 4.2 aarch64-linux-gnu-gcc https://releases.linaro.org/components/toolchain/binaries https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads xz -d xxx.tar.xz tar xvf xxx.tar Support legacy arm-linux-gcc binary: Userspace binary formats ---> Kernel support for 32-bit EL0 4.3 Linux Makefile静态链接 libtool在link-mode时,可以使用参数:-all-static 且这个参数要放在ld之后,如下: /bin/sh ../libtool --tag=CC --mode=link aarch64-linux-gnu-gcc -all-static  在这里是放在aarch64-linux-gnu-gcc之后,不然提示找不到-all-static。 生成的链接命令会自动加上:-static,并且自动寻找lib*.a的静态库。 https://www.gnu.org/software/libtool/manual/html_node/Link-mode.html  

转载请注明原文地址: https://www.6miu.com/read-12062.html

最新回复(0)