1 2 3 4 | Ubuntu 20.04 Disk>=300G Mem>=16G CPU>=8 |
1 2 3 4 | sudo useradd -m mowen -s /bin/bash sudo passwd mowen sudo adduser mowen sudo su mowen |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | sudo apt update sudo apt-get install -y git curl # More info: https://github.com/git-lfs/git-lfs/blob/master/INSTALLING.md # Apt/deb sudo apt install git-lfs # Yum/rpm sudo yum install git-lfs # on macOS brew install git-lfs git config --global user.email "xxxx@xxx.com" git config --global user.name "xxxx" mkdir ~ /bin PATH=~ /bin :$PATH curl https: //storage .googleapis.com /git-repo-downloads/repo > ~ /bin/repo or curl https: //mirrors .tuna.tsinghua.edu.cn /git/git-repo > ~ /bin/repo chmod a+x ~ /bin/repo export REPO_URL= 'https://mirrors.ustc.edu.cn/aosp/git-repo' or export REPO_URL='https: //mirrors .tuna.tsinghua.edu.cn /git/git-repo # 设置Windows主机aosp源码目录大小写敏感 fsutil.exe file setCaseSensitiveInfo h:\\AOSP\\aosp enable # Linux编译机进入Windows主机aosp源码目录 cd /mnt/h/AOSP/aosp python3 ~ /bin/repo init -u android.googlesource.com /platform/manifest -b android-13.0.0_r24 --depth=1 or # fetch remote-android branch # redroid-9.0.0 # redroid-10.0.0 # redroid-11.0.0 # redroid-12.0.0 # redroid-13.0.0_r24 python3 ~ /bin/repo init -u https: //github .com /remote-android/platform_manifests .git -b redroid-13.0.0_r24 --depth=1 or # using ustc mirror python3 ~ /bin/repo init -u git: //mirrors .ustc.edu.cn /aosp/platform/manifest -b android-13.0.0_r24 --depth=1 or # using tsinghua mirror # https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds python3 ~ /bin/repo init -u https: //mirrors .tuna.tsinghua.edu.cn /git/AOSP/platform/manifest -b android-13.0.0_r24 --depth=1 or # using tsinghua monthly archive curl -OC - https: //mirrors .tuna.tsinghua.edu.cn /aosp-monthly/aosp-latest . tar tar xf aosp-latest. tar cd AOSP # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录 # 正常同步一遍即可得到完整目录 python3 ~ /bin/repo sync or python3 ~ /bin/repo sync -c -f --no-tags --no-clone-bundle -j`nproc` # 或仅checkout代码 python3 ~ /bin/repo sync -l # sync python3 ~ /bin/repo sync -c -j12 # 查看aosp远程分支 git --git- dir =.repo /manifests/ .git/ branch -rv # 查看aosp本地分支 git --git- dir =.repo /manifests/ .git/ branch -vv # 切换aosp本地分支 python3 ~ /bin/repo init -b gingerbread-release # 本地分支问题重置 python3 ~ /bin/repo forall -c git reset --hard remotes /origin/xxxxxxx python3 ~ /bin/repo forall -c git xxxxxxx python3 ~ /bin/repo sync <OpenGApps> # use normal user to install docker su mowen sudo snap install docker # create builder docker image sudo docker build --build-arg userid=$( id -u) --build-arg groupid=$( id -g) --build-arg username=$( id -un) -t redroid-builder . # start builder sudo docker run -it -- rm -- hostname redroid-builder --name redroid-builder - v /root : /src redroid-builder # *inside* builder container cd /src . build /envsetup .sh lunch redroid_x86_64-userdebug # lunch redroid_arm64-userdebug # lunch redroid_x86_64_only-userdebug (64 bit only, redroid 12+) # lunch redroid_arm64_only-userdebug (64 bit only, redroid 12+) make clobber && make # create redroid docker image in *HOST* cd <BUILD-OUT-DIR> sudo mount system.img system -o ro && sudo mount vendor.img vendor -o ro && sudo tar --xattrs -c vendor -C system --exclude= "vendor" . | docker import -c 'ENTRYPOINT ["/init", "qemu=1", "androidboot.hardware=redroid"]' - mowen99 /redroid-gms :11.0.0-amd64 && sudo umount system && sudo umount vendor # create rootfs only image for develop purpose tar --xattrs -c -C root . | docker import -c 'ENTRYPOINT ["/init", "qemu=1", "androidboot.hardware=redroid"]' - redroid-dev # load kernel modules apt install linux-modules-extra-` uname -r` && modprobe binder_linux devices= "binder,hwbinder,vndbinder" && modprobe ashmem_linux && lsmod| grep -e ashmem -e binder # run container docker run -itd --memory-swappiness=0 --name redroid --restart always --privileged - v ~ /data11 : /data -p 6666:5555 mowen99 /redroid-gms :11.0.0-amd64 && docker exec -it redroid pm -l # remove container docker stop redroid && docker rm redroid && rm -rf ~ /data11 |
Kernel
1 2 3 | mkdir /opt/kernel && cd /opt/kernel && python3 ~ /bin/repo init -u https: //android .googlesource.com /kernel/manifest -b common-android-4.19-stable && python3 ~ /bin/repo sync -c -j8 |
Wpa_supplicant
1 2 3 | https: //w1 . fi /cgit/hostap/plain/wpa_supplicant/wpa_supplicant .conf https: //android .googlesource.com /platform/hardware/broadcom/wlan https: //android .googlesource.com /platform/external/wpa_supplicant_8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | TARGET_PRODUCT_KERNEL_HEADERS += device /redroid/include # WiFi required by SystemUI PRODUCT_PACKAGES += \ android.hardware.wifi@1.0-service \ android.hardware.wifi.supplicant@1.0::ISupplicant \ mac80211_create_radios \ lib_driver_cmd_simulated \ libwifi-hal-emu \ createns \ dhcpclient \ execns \ hostapd \ hostapd_nohidl \ netmgr \ wifi_forwarder \ wpa_supplicant \ libwpa_client \ wifilogd \ wificond \ PRODUCT_COPY_FILE += \ device /generic/goldfish/data/etc/apns-conf .xml:data /misc/apns/apns-conf .xml \ device /generic/goldfish/radio/RadioConfig/radioconfig .xml:data /misc/emulator/config/radioconfig .xml \ device /generic/goldfish/wifi/init .wifi.sh:$(TARGET_COPY_OUT_VENDOR) /bin/init .wifi.sh \ device /generic/goldfish/wifi/simulated_hostapd .conf:$(TARGET_COPY_OUT_VENDOR) /etc/simulated_hostapd .conf \ #device/generic/goldfish/wifi/wpa_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \ device /generic/goldfish/wifi/WifiConfigStore .xml:data /misc/wifi/WifiConfigStore .xml \ frameworks /native/data/etc/android .hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR) /etc/permissions/android .hardware.wifi.xml \ frameworks /native/data/etc/android .hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR) /etc/permissions/android .hardware.wifi.passpoint.xml \ frameworks /native/data/etc/android .hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR) /etc/permissions/android .hardware.wifi.direct.xml \ frameworks /native/data/etc/android .hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR) /etc/permissions/android .hardware.bluetooth_le.xml \ frameworks /native/data/etc/android .hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR) /etc/permissions/android .hardware.bluetooth.xml \ |
1 2 3 4 5 6 7 8 9 10 11 12 13 | /root/device/redroid/redroid_x86_64/BoardConfig .mk WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WLAN_DEVICE := bcmdhd BOARD_WPA_SUPPLICANT_DRIVER := NL80211 BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE) BOARD_HOSTAPD_DRIVER := NL80211 BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE) WIFI_DRIVER_MODULE_NAME := "bcmdhd" WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/bcmdhd.ko" WIFI_HIDL_FEATURE_DUAL_INTERFACE := true mmm hardware /broadcom/wlan/bcmdhd/wpa_supplicant_8_lib |
1 2 3 | external /wpa_supplicant_8/Android .mk $(LOCAL_PATH) /wpa_supplicant/Android .mk // modify this about line 9 |
1 2 3 | external /wpa_supplicant_8/src/utils/wpa_debug .c int wpa_debug_level = MSG_DEBUG; // modify this about line 30 |
1 2 3 4 5 6 7 | external /wpa_supplicant_8/wpa_supplicant/android .config # CONFIG_DRIVER_WEXT=y // modify this about line 29 CONFIG_DRIVER_NL80211=y // open this about line 32 CONFIG_LIBNL20=y // open this about line 3 mmm external /wpa_supplicant_8 |
Mac80211_hwsim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # https://wireless.wiki.kernel.org/en/users/drivers/mac80211_hwsim # https://www.kernel.org/doc/html/latest/networking/mac80211_hwsim/mac80211_hwsim.html # Build mac80211_hwsim as part of kernel configuration ... # Load the module modprobe mac80211_hwsim # Run hostapd (AP) for wlan0 ... # Run wpa_supplicant (station) for wlan1 ... |
Udhcpd
1 2 3 4 5 6 7 | apt-get install -y udhcpd /etc/udhcpd .conf interface wlan0 #default: eth0 // modity this line about line 11 eth0 -> wlanX systemctl start udhcpd && systemctl enable udhcpd && systemctl status udhcpd |
Hostapd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | apt-get install -y hostapd /etc/hostapd/hostapd .conf ctrl_interface= /var/run/hostapd nterface=wlan0 driver=nl80211 ieee80211n=1 hw_mode=g channel=6 ssid= "CCSSID" wpa=2 wpa_passphrase= "a12345678A" wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP TKIP wpa_pairwise=TKIP CCMP service hostapd stop && ifconfig wlan0 192.168.0.20 && hostapd /etc/hostapd/hostapd .conf -td && iptables -A FORWARD -i wlan0 -o eth0 -s 192.168.0.0 /24 -m state --state NEW -j ACCEPT && iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT && iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && echo "1" > /proc/sys/net/ipv4/ip_forward && wpa_cli -iwlan1 -p /data/misc/wifi/wlan0 |
Wifi
1 2 3 4 5 6 7 8 9 10 | frameworks /base/packages/SettingsProvider/res/values/defaults .xml <bool name= "def_wifi_display_on" > true < /bool > // modify this line about line 40 <bool name= "def_install_non_market_apps" > true < /bool > // modify this line about line 41 <bool name= "def_wifi_on" > true < /bool > // modify this line about line 47 <integer name= "def_wifi_sleep_policy" >0< /integer > // modify this line about line 49 <bool name= "def_wifi_wakeup_enabled" > true < /bool > // modify this line about line 50 <integer name= "def_wifi_scan_always_available" >1< /integer > // modify this line about line 160 <bool name= "def_user_setup_complete" > true < /bool > // modify this line about line 146 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | mkdir /var/run/wpa_supplicant out /target/product/redroid_x86_64/system/etc/wifi/wpa_supplicant .conf ctrl_interface= /var/run/wpa_supplicant update_config=1 eapol_version=1 ap_scan=1 fast_reauth=1 network={ ssid= "CCSSID" psk= "a12345678A" key_mgmt=WPA-PSK } wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant .conf -Dnl80211 -ddd -iwlan1 |
OpenGApps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .repo /manifests/opengapps .xml <?xml version= "1.0" encoding= "UTF-8" ?> <manifest> <remote name= "opengapps" fetch= "https://github.com/opengapps/" /> <remote name= "opengapps-gitlab" fetch= "https://gitlab.opengapps.org/opengapps/" /> <project path= "vendor/opengapps/build" name= "aosp_build" revision= "master" remote= "opengapps" /> <project path= "vendor/opengapps/sources/all" name= "all" clone-depth= "1" revision= "master" remote= "opengapps-gitlab" /> <!-- arm64 depends on arm --> <project path= "vendor/opengapps/sources/arm" name= "arm" clone-depth= "1" revision= "master" remote= "opengapps-gitlab" /> <project path= "vendor/opengapps/sources/arm64" name= "arm64" clone-depth= "1" revision= "master" remote= "opengapps-gitlab" /> <project path= "vendor/opengapps/sources/x86" name= "x86" clone-depth= "1" revision= "master" remote= "opengapps-gitlab" /> <project path= "vendor/opengapps/sources/x86_64" name= "x86_64" clone-depth= "1" revision= "master" remote= "opengapps-gitlab" /> < /manifest > |
1 2 3 | .repo /manifests/redroid .xml <include name= "opengapps.xml" /> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | device /redroid/redroid_x86_64/device .mk GAPPS_VARIANT := stock GAPPS_EXCLUDED_PACKAGES += GoogleCamera PRODUCT_COPY_FILES += device /redroid/mediacodec .policy.x86:$(TARGET_COPY_OUT_VENDOR) /etc/seccomp_policy/mediacodec .policy \ $(call inherit-product, vendor /opengapps/build/opengapps-packages .mk) $(call inherit-product, device /redroid-prebuilts/prebuilts_x86 .mk) device /redroid/redroid_arm64/device .mk GAPPS_VARIANT := stock GAPPS_EXCLUDED_PACKAGES += GoogleCamera PRODUCT_COPY_FILES += device /redroid/mediacodec .policy.arm:$(TARGET_COPY_OUT_VENDOR) /etc/seccomp_policy/mediacodec .policy \ $(call inherit-product, vendor /opengapps/build/opengapps-packages .mk) $(call inherit-product, device /redroid-prebuilts/prebuilts_arm .mk) |
1 | python3 ~ /bin/repo sync -c -j8 |
1 2 3 | vendor /opengapps/build/modules/Android .mk include $(call all-named-subdir-makefiles,$(GAPPS_PRODUCT_PACKAGES)) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | vendor /opengapps/build/opengapps-packages .mk ifneq ($(filter 28,$(call get-allowed-api-levels)),) GAPPS_PRODUCT_PACKAGES += \ DigitalWellbeing \ MarkupGoogle \ // remove this line about line 112 SoundPicker endif ... GAPPS_FORCE_MMS_OVERRIDES := true GAPPS_FORCE_WEBVIEW_OVERRIDES := true GAPPS_PRODUCT_PACKAGES += \ GoogleCamera \ // remove this line about line 165 GoogleContacts \ LatinImeGoogle \ StorageManagerGoogle \ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | cd vendor /opengapps/sources git-lfs install python3 ~ /bin/repo forall -c git lfs pull git clone https: //gitlab .opengapps.org /opengapps/all .git git clone https: //gitlab .opengapps.org /opengapps/arm .git git clone https: //gitlab .opengapps.org /opengapps/arm64 .git git clone https: //gitlab .opengapps.org /opengapps/x86 .git git clone https: //gitlab .opengapps.org /opengapps/x86_64 .git Or # FAILED: out/target/product/redroid_x86_64/obj/APPS/CalculatorGoogle_intermediates/package.apk # Unable to open 'out/target/product/redroid_x86_64/obj/APPS/CalculatorGoogle_intermediates/package.apk' for verification # Unable to open 'out/target/product/redroid_x86_64/obj/APPS/CalculatorGoogle_intermediates/package.apk.unaligned' as zip archive # mv: bad 'out/target/product/redroid_x86_64/obj/APPS/CalculatorGoogle_intermediates/package.apk.aligned': No such file or directory python3 ~ /bin/repo forall -r '.*opengapps.*' -c 'git lfs fetch && git lfs checkout' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Error && fixed [ 0% 11 /18898 ] Check prebuilt ELF binary: vendor /opengapps/sources/x86_64/lib64/23/libjni_latinimegoogle .so FAILED: out /target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libjni_latinimegoogle_intermediates/check_elf_files .timestamp /bin/bash -c "(rm -f out/target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libjni_latinimegoogle_intermediates/check_elf_files.timestamp ) && (build/make/tools/check_elf_file.py --skip-bad-elf-magic --skip-unknown-elf-machine --soname libjni_latinimegoogle.so --shared-lib out/target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libstdc++_intermediates/libstdc++.so --shared-lib out/target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libc++_intermediates/libc++.so --shared-lib out/target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libc_intermediates/libc.so --shared-lib out/target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libm_intermediates/libm.so --shared-lib out/target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libdl_intermediates/libdl.so --llvm-readobj=prebuilts/clang/host/linux-x86/clang-r383902b1/bin/llvm-readobj vendor/opengapps/sources/x86_64/lib64/23/libjni_latinimegoogle.so ) && (touch out/target/product/redroid_x86_64/obj/SHARED_LIBRARIES/libjni_latinimegoogle_intermediates/check_elf_files.timestamp )" vendor /opengapps/sources/x86_64/lib64/23/libjni_latinimegoogle .so: error: DT_SONAME "libjni_unbundled_latinimegoogle.so" must be equal to the file name "libjni_latinimegoogle.so" . [ 0% 12 /18898 ] Check prebuilt ELF binary: vendor /opengapps/sources/x86/lib/23/libjni_latinimegoogle .so FAILED: out /target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libjni_latinimegoogle_intermediates/check_elf_files .timestamp /bin/bash -c "(rm -f out/target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libjni_latinimegoogle_intermediates/check_elf_files.timestamp ) && (build/make/tools/check_elf_file.py --skip-bad-elf-magic --skip-unknown-elf-machine --soname libjni_latinimegoogle.so --shared-lib out/target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libstdc++_intermediates/libstdc++.so --shared-lib out/target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libc++_intermediates/libc++.so --shared-lib out/target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libc_intermediates/libc.so --shared-lib out/target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libm_intermediates/libm.so --shared-lib out/target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libdl_intermediates/libdl.so --llvm-readobj=prebuilts/clang/host/linux-x86/clang-r383902b1/bin/llvm-readobj vendor/opengapps/sources/x86/lib/23/libjni_latinimegoogle.so ) && (touch out/target/product/redroid_x86_64/obj_x86/SHARED_LIBRARIES/libjni_latinimegoogle_intermediates/check_elf_files.timestamp )" vendor /opengapps/sources/x86/lib/23/libjni_latinimegoogle .so: error: DT_SONAME "libjni_unbundled_latinimegoogle.so" must be equal to the file name "libjni_latinimegoogle.so" . vim vendor /opengapps/build/modules/LatinImeGoogle/Android .mk LOCAL_REQUIRED_MODULES := libjni_unbundled_latinimegoogle // update this line LOCAL_MODULE := libjni_unbundled_latinimegoogle.so // update this line |
1 2 3 4 5 | error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet. sudo apt install gnutls-bin git config --global http.sslVerify false git config --global http.postBuffer 1048576000 // 增加至1GB缓存 |
1 2 3 | fatal: detected dubious ownership in repository at git config --global --add safe.directory "*" ; |
ROM Registry
1 2 3 4 5 6 7 | adb root adb shell 'sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"' android_id|4560257781094180552 https: //www .google.com /android/uncertified/ |
Dockfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | FROM ubuntu:20.04 ARG userid ARG groupid ARG username # COPY apt.conf /etc/apt/apt.conf # COPY sources.list etc/apt/sources.list ENV DEBIAN_FRONTEND noninteractive RUN apt-get update \ && echo "install package for building AOSP" \ && apt-get install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev \ gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev \ libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig \ rsync python3-pip pkg-config python3-dev ninja-build \ && pip3 install mako meson \ && apt-get install -y python2 python-mako python-is-python2 python-enum34 gettext \ && apt-get install -y dialog apt-utils linux-headers-` uname -r` RUN groupadd -g $groupid $username \ && useradd -m -u $userid -g $groupid $username \ && echo "$username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers \ && echo $username > /root/username \ && echo "$username:$username" | chpasswd && adduser $username sudo ENV HOME= /home/ $username \ USER=$username \ PATH= /src/ .repo /repo : /src/prebuilts/jdk/jdk8/linux-x86/bin/ :$PATH ENTRYPOINT chroot --userspec=$( cat /root/username ):$( cat /root/username ) / /bin/bash -i |
最新回复 (0)