Android源码编译

手动编译Android源码

准备环境
  1. 虚拟机磁盘480G
  2. 运行内存至少12G,不够则可以选择添加swap空间
  3. kali 系统 默认用户名 密码 kali kali
  4. 下载 aosp8.1.0r1 源码
  1. 设置root账号密码

    sudo passwd root
    # 当前用户密码
    >kali
    # root 用户密码
    >toor
    # 二次确认
    >toor
    
  2. 调整时区

    dpkg-reconfigure tzdata
    # Asia -> Shanghai
    reboot
    
  3. 调整磁盘分区,挂载磁盘到指定目录 (使用gparted)

    1. gparted
      
    2. 选择 未使用的磁盘空间(unallocated) 呈现灰色区域

    3. 右键点击 New -> add(添加磁盘分区)

    4. 点击 ✔ -> apply

    5. 添加磁盘成功后会显示磁盘的系统挂载信息 eg: /dev/sda3

    6. 在桌面上新建一个COMILE目录

      cd Desktop
      mkdir COMPILE
      mount /dev/sda3 COMPILE
      cd COMPILE
      ls
      # 出现 lost+fount 表示磁盘挂载到COMPILE成功
      
  4. 使用sshd开拷贝Android源码(aosp810r1.7z)到虚拟机中(使用ssh进行文件传输)(fireZilla)

    1. 开启sshd服务
    vim /etc/ssh/sshd_config
    # 使用vim搜索命令查找 PermitRootLogin,按`n`查找下一个,按`N`查找上一个
    /PermitRootLogin
    

    取消注释,将PermitRootLogin属性值修改为 yes,wq保存退出

    # 开启ssh服务
    /etc/init.d/ssh start
    # 获取当前虚拟机的ip, shift c 复制
    ipconfig
    
    1. 使用ssh连接工具进行ssh连接传输android源码文件
  5. 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
    
  6. 校验Android源码

    # 将校验的信息打印到控制台屏幕
    cd COMPILE
    cat aosp810r1.7z.txt
    # 使用md5sum校验信息是否与上面打印的信息是否相同
    md5sum aosp810r1.7z
    
  7. 使用 7z 解压Android源码

    # 解压过程中会出错  选择 A 就行了
    7z x aosp810r1.7z
    
  8. 安装一些指定的安装包

    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	
    
  9. 安装openjdk8 , 最新版会出错

    proxychains wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
    # 解压
    tar zxvf openjdk
    
  10. 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
    
  11. 进行解压后的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
    
  12. 重启电脑

    # 重启电脑
    reboot
    
  13. 电脑重启后需要进行对之前挂载的磁盘进行重新加载,否转不会出现内容

    # 进行磁盘挂载,  但是我的却不需要 ( ╯□╰ )
    mount /dev/sda3 /root/Desktop/COMILE/
    # 执行之前下载解压后的两个驱动文件
    cd ~/Desktop/COMPILE/aosp810r1/
    # 执行google sh,按 空格 进行翻页查阅,
    ./extract-google_devices-marlin.sh
    # 同理 google
    ./extract-qcom-marlin.sh
    
  14. 编译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
    
  15. 编译好的文件都存放在 ~/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