手动编译Android源码
准备环境
- 虚拟机磁盘480G
- 运行内存至少12G,不够则可以选择添加swap空间
- kali 系统 默认用户名 密码 kali kali
- 下载 aosp8.1.0r1 源码
-
设置root账号密码
sudo passwd root # 当前用户密码 >kali # root 用户密码 >toor # 二次确认 >toor -
调整时区
dpkg-reconfigure tzdata # Asia -> Shanghai reboot -
调整磁盘分区,挂载磁盘到指定目录 (使用gparted)
-
gparted -
选择 未使用的磁盘空间(unallocated) 呈现灰色区域
-
右键点击 New -> add(添加磁盘分区)
-
点击 ✔ -> apply
-
添加磁盘成功后会显示磁盘的系统挂载信息 eg: /dev/sda3
-
在桌面上新建一个COMILE目录
cd Desktop mkdir COMPILE mount /dev/sda3 COMPILE cd COMPILE ls # 出现 lost+fount 表示磁盘挂载到COMPILE成功
-
-
使用sshd开拷贝Android源码(aosp810r1.7z)到虚拟机中(使用ssh进行文件传输)(fireZilla)
- 开启sshd服务
vim /etc/ssh/sshd_config # 使用vim搜索命令查找 PermitRootLogin,按`n`查找下一个,按`N`查找上一个 /PermitRootLogin取消注释,将PermitRootLogin属性值修改为 yes,wq保存退出
# 开启ssh服务 /etc/init.d/ssh start # 获取当前虚拟机的ip, shift c 复制 ipconfig- 使用ssh连接工具进行ssh连接传输android源码文件
-
proxychains 代理配置
# 更新 apt apt update # 使用jnettop 查看系统网络状态信息 apt install jnettop # 安装htop查看系统运行信息 apt install htop # 配置 proxychains 代理 vim /etc/proxychains4.conf # 调整最后一行[ProxyList],修改socks4,为socks5 ip(代理地址) 端口(port),保存退出# 查看代理的ip外网的地址 proxychains curl ip.sb # 可与 curl ip.sb 进行查看对比是否是否生效 curl ip.sb -
校验Android源码
# 将校验的信息打印到控制台屏幕 cd COMPILE cat aosp810r1.7z.txt # 使用md5sum校验信息是否与上面打印的信息是否相同 md5sum aosp810r1.7z -
使用
7z解压Android源码# 解压过程中会出错 选择 A 就行了 7z x aosp810r1.7z -
安装一些指定的安装包
apt update apt install bison tree dpkg --add-architecture i386 apt update apt install libc6:i386 libncurses5:i386 libstdc++6:i386 apt install libxml2-utils -
安装openjdk8 , 最新版会出错
proxychains wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz # 解压 tar zxvf openjdk -
Kali最新版本的默认shell是zsh,我们应该回退到bash。chsh -s /bin/bash 。执行命令后重启
chsh -s /bin/bash编辑 .bashrc,添加内容
export JAVA_HOME=/root/Desktop/openjdk8/java-se-8u41-ri # openjdk8解压后的路径 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar -
进行解压后的aosp810r1下载对应的驱动 下载地址 搜索关键字
OPM1.171019.011找到手机对应的 版本下载cd ~/Desktop/aosp810r1 wget https://dl.google.com/dl/android/aosp/google_devices-marlin-opm1.171019.011-62249e06.tgz wget https://dl.google.com/dl/android/aosp/qcom-marlin-opm1.171019.011-ce710ec5.tgz tar zxvf google_devices-marlin-opm1.171019.011-62249e06.tgz tar zxvf qcom-marlin-opm1.171019.011-ce710ec5.tgz # 查看文件信息和日期 ls -alit -
重启电脑
# 重启电脑 reboot -
电脑重启后需要进行对之前挂载的磁盘进行重新加载,否转不会出现内容
# 进行磁盘挂载, 但是我的却不需要 ( ╯□╰ ) mount /dev/sda3 /root/Desktop/COMILE/ # 执行之前下载解压后的两个驱动文件 cd ~/Desktop/COMPILE/aosp810r1/ # 执行google sh,按 空格 进行翻页查阅, ./extract-google_devices-marlin.sh # 同理 google ./extract-qcom-marlin.sh -
编译Android源码
# 这些命令都是在 /root/Desktop/COMPILE/aosp810r1 下执行 export LC_ALL=C source build/envsetup.sh # 安装 m4 apt install m4 # 开始编译 lunch # lunch 后选择对应型号的手机编号 24. asop_sailfish-userdebug > 24 # 按m开始编译,一般等到%5过后就没有问题了 m编译前 关掉锁屏
setting -> Power Manager -> Display - > Display power management -> off
eg:
└─# m ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=8.1.0 TARGET_PRODUCT=aosp_sailfish TARGET_BUILD_VARIANT=userdebug TARGET_BUILD_TYPE=release TARGET_ARCH=arm64 TARGET_ARCH_VARIANT=armv8-a TARGET_CPU_VARIANT=kryo TARGET_2ND_ARCH=arm TARGET_2ND_ARCH_VARIANT=armv7-a-neon TARGET_2ND_CPU_VARIANT=kryo HOST_ARCH=x86_64 HOST_2ND_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=Linux-5.10.0-kali3-amd64-x86_64-with-debian-kali-rolling HOST_CROSS_OS=windows HOST_CROSS_ARCH=x86 HOST_CROSS_2ND_ARCH=x86_64 HOST_BUILD_TYPE=release BUILD_ID=OPM1.171019.011 OUT_DIR=out ============================================ ninja: no work to do. ninja: no work to do. out/build-aosp_sailfish.ninja is missing, regenerating... [680/995] including ./system/sepolicy/Android.mk ... ./system/sepolicy/Android.mk:111: warning: BOARD_SEPOLICY_VERS not specified, assuming current platform version [995/995] including ./tools/tradefederation/core/Android.mk ... PRODUCT_COPY_FILES device/generic/goldfish/data/etc/apns-conf.xml:system/etc/apns-conf.xml ignored. No private recovery resources for TARGET_DEVICE sailfish platform_testing/build/tasks/tests/instrumentation_test_list.mk: warning: continuous_instrumentation_tests: Unknown installed file for module RecyclerViewTests platform_testing/build/tasks/tests/instrumentation_test_list.mk: warning: continuous_instrumentation_tests: Unknown installed file for module SettingsFunctionalTests platform_testing/build/tasks/tests/instrumentation_test_list.mk: warning: continuous_instrumentation_tests: Unknown installed file for module LauncherFunctionalTests platform_testing/build/tasks/tests/instrumentation_test_list.mk: warning: continuous_instrumentation_tests: Unknown installed file for module EmergencyInfoTests [ 99% 1438/1439] glob vendor/*/*/Android.bp [ 2% 2487/91546] target C: e2fsdroid_static <= external/e2fsprogs/contrib/android/block_list.c In file included from external/e2fsprogs/contrib/android/block_list.c:1: In file included from external/e2fsprogs/contrib/android/block_list.h:4: In file included from external/e2fsprogs/contrib/android/fsmap.h:11: In file included from external/e2fsprogs/lib/ext2fs/ext2fs.h:71: external/e2fsprogs/lib/ext2fs/ext2_types.h:30:9: warning: '__bitwise' macro redefined [-Wmacro-redefined] #define __bitwise ^ bionic/libc/kernel/uapi/linux/types.h:25:9: note: previous definition is here #define __bitwise __bitwise__ ^ 1 warning generated. [ 2% 2488/91546] target C: e2fsdroid_static <= external/e2fsprogs/contrib/android/fsmap.c In file included from external/e2fsprogs/contrib/android/fsmap.c:1: In file included from external/e2fsprogs/contrib/android/fsmap.h:11: In file included from external/e2fsprogs/lib/ext2fs/ext2fs.h:71: external/e2fsprogs/lib/ext2fs/ext2_types.h:30:9: warning: '__bitwise' macro redefined [-Wmacro-redefined] #define __bitwise ^ bionic/libc/kernel/uapi/linux/types.h:25:9: note: previous definition is here #define __bitwise __bitwise__ ^ 1 warning generated. [ 2% 2489/91546] target C: e2fsdroid_static <= external/e2fsprogs/contrib/android/block_range.c In file included from external/e2fsprogs/contrib/android/block_range.c:3: In file included from external/e2fsprogs/contrib/android/block_range.h:5: In file included from external/e2fsprogs/lib/ext2fs/ext2fs.h:71: external/e2fsprogs/lib/ext2fs/ext2_types.h:30:9: warning: '__bitwise' macro redefined [-Wmacro-redefined] #define __bitwise ^ bionic/libc/kernel/uapi/linux/types.h:25:9: note: previous definition is here #define __bitwise __bitwise__ ^ 1 warning generated. [ 2% 2490/91546] target C: e2fsdroid_static <= external/e2fsprogs/contrib/android/basefs_allocator.c In file included from external/e2fsprogs/contrib/android/basefs_allocator.c:3: In file included from external/e2fsprogs/contrib/android/basefs_allocator.h:5: In file included from external/e2fsprogs/lib/ext2fs/ext2fs.h:71: external/e2fsprogs/lib/ext2fs/ext2_types.h:30:9: warning: '__bitwise' macro redefined [-Wmacro-redefined] #define __bitwise ^ bionic/libc/kernel/uapi/linux/types.h:25:9: note: previous definition is here #define __bitwise __bitwise__ ^ 1 warning generated. [ 2% 2491/91546] target C: e2fsdroid_static <= external/e2fsprogs/contrib/android/base_fs.c In file included from external/e2fsprogs/contrib/android/base_fs.c:1: In file included from external/e2fsprogs/contrib/android/base_fs.h:4: In file included from external/e2fsprogs/contrib/android/fsmap.h:11: In file included from external/e2fsprogs/lib/ext2fs/ext2fs.h:71: external/e2fsprogs/lib/ext2fs/ext2_types.h:30:9: warning: '__bitwise' macro redefined [-Wmacro-redefined] #define __bitwise ^ bionic/libc/kernel/uapi/linux/types.h:25:9: note: previous definition is here #define __bitwise __bitwise__ ^ 1 warning generated. [ 2% 2495/91546] target C: e2fsdroid_static <= external/e2fsprogs/contrib/android/perms.c In file included from external/e2fsprogs/contrib/android/perms.c:4: In file included from external/e2fsprogs/contrib/android/perms.h:5: In file included from external/e2fsprogs/lib/ext2fs/ext2fs.h:71: external/e2fsprogs/lib/ext2fs/ext2_types.h:30:9: warning: '__bitwise' macro redefined [-Wmacro-redefined] #define __bitwise ^ bionic/libc/kernel/uapi/linux/types.h:25:9: note: previous definition is here #define __bitwise __bitwise__ ^ external/e2fsprogs/contrib/android/perms.c:291:31: warning: unused parameter 'seopts' [-Wunused-parameter] struct selinux_opt *seopts, ^ external/e2fsprogs/contrib/android/perms.c:292:24: warning: unused parameter 'nopt' [-Wunused-parameter] unsigned int nopt, ^ 3 warnings generated. [ 2% 2496/91546] target C: e2fsdroid_static <= external/e2fsprogs/contrib/android/e2fsdroid.c In file included from external/e2fsprogs/contrib/android/e2fsdroid.c:6: In file included from external/e2fsprogs/lib/ext2fs/ext2fs.h:71: external/e2fsprogs/lib/ext2fs/ext2_types.h:30:9: warning: '__bitwise' macro redefined [-Wmacro-redefined] #define __bitwise ^ bionic/libc/kernel/uapi/linux/types.h:25:9: note: previous definition is here #define __bitwise __bitwise__ ^ 1 warning generated. [ 3% 3496/91546] Ensuring Jack server is installed and started Writing client settings in /root/.jack-settings Installing jack server in "/root/.jack-server" Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /root/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher [ 3% 3514/91546] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/com.android.vcard_intermediates/classes.jack -
编译好的文件都存放在
~/Desktop/COMPILE/aosp810r1/out/target/product/sailfish中内存实在不够添加swap交换空间,内存不够的时候会把多余的文件放入swap
新增10G的swap: # dd if=/dev/zero of=swapfile bs=1M count=10240 mkswap创建交换文件: # mkswap swapfile swapon激活 # sudo swapon swapfile 开机启动: # vim /etc/fstab 添加 # /swap/swapfile swap swapdefaults 0 0