安装依赖
echo "Wang812330500" | sudo -S apt install -y bc bison build-essential \
ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick \
lib32ncurses5-dev lib32readline-dev lib32z1-dev libelf-dev liblz4-tool libncurses5 \
libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush \
rsync schedtool squashfs-tools xsltproc zip zlib1g-dev libwxgtk3.0-gtk3-dev
配置环境变量
echo "Wang812330500" | sudo -S update-alternatives --install /usr/bin/python python /usr/bin/python3 150
配置邮箱
git config --global user.name "wangjiasheng"
git config --global user.email "314232332@qq.com"
挂载代码所在磁盘
if mountpoint -q /mnt/NVME
then
echo "------mounted--------"
elseecho "812330500" | sudo -S mount /dev/nvme0n2p1 /mnt/NVME/
fi
安装Adb工具
wget https://dl.google.com/android/repository/platform-tools_r34.0.4-linux.zip
export ANDROID_TOOLS=/usr/platform-tools
export PATH=$PATH:$ANDROID_TOOLS
设置代理
export IP=10.10.108.225
export http_proxy=socks5://${IP}:7890
export https_proxy=socks5://${IP}:7890
export FTP_PROXY=socks5://${IP}:7890
export ALL_PROXY=socks5://$IP:7890
git config --global http.proxy socks5://${IP}:7890
git config --global https.proxy socks5://${IP}:7890
git config --global http.postBuffer 524288000
取消代理
unset http_proxy
unset https_proxy
unset FTP_PROXY
unset ALL_PROXY
git config --global --unset http.proxy
git config --global --unset https.proxy
安装LFS
git lfs install
配置CCache
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
ccache -M 50G
ccache -o compression=true
配置虚拟内存
编译过程中报错 ninja failed with: exit status 137需要添加虚拟内存
根目录创建一个文件作为虚拟内存
sudo dd if=/dev/zero of=/swap bs=1M count=16384
#设置权限
sudo chmod 666 /swap
#设置swap文件系统
sudo mkswap /swap
#激活swap
sudo swapon /swap
#添加开机启动
sudo vi /etc/fstab
/swap swap swap defaults 0 0
用一个单独的磁盘作为虚拟内存
sudo mkswap /dev/sda1
sudo swapon /dev/sda1
查看虚拟内存
free -h
拉取系统
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-20.0 --git-lfs --depth=1
repo sync --no-clone-bundle --current-branch
repo start master --all
编译系统
cd /mnt/NVME/
source build/envsetup.sh
breakfast polaris
croot
brunch polaris
编译Framework
mka framework-minus-apex
adb root
adb remount
adb push /mnt/NVME/out/target/product/polaris/system/framework/framework.jar /system/framework/
adb push /mnt/NVME/out/target/product/polaris/system/framework/arm/* /system/framework/arm/
adb push /mnt/NVME/out/target/product/polaris/system/framework/arm64/* /system/framework/arm64/
创建自己系统签名并输入密码
subject='/C=CN/ST=HuBei/L=Wuhan/O=Meizu/OU=Meizu/CN=314232332/emailAddress=314232332@qq.com'
mkdir ~/.android-certs
for cert in bluetooth cyngn-app media networkstack platform releasekey sdk_sandbox shared testcert testkey verity; do \./development/tools/make_key ~/.android-certs/$cert "$subject"; \
done
cp ./development/tools/make_key ~/.android-certs/
sed -i 's|2048|4096|g' ~/.android-certs/make_key
for apex in com.android.adbd com.android.adservices com.android.adservices.api com.android.appsearch com.android.art com.android.bluetooth com.android.btservices com.android.cellbroadcast com.android.compos com.android.connectivity.resources com.android.conscrypt com.android.extservices com.android.hotspot2.osulogin com.android.i18n com.android.ipsec com.android.media com.android.media.swcodec com.android.mediaprovider com.android.nearby.halfsheet com.android.networkstack.tethering com.android.neuralnetworks com.android.ondevicepersonalization com.android.os.statsd com.android.permission com.android.resolv com.android.runtime com.android.safetycenter.resources com.android.scheduling com.android.sdkext com.android.support.apexer com.android.telephony com.android.tethering com.android.tzdata com.android.uwb com.android.uwb.resources com.android.virt com.android.vndk.current com.android.wifi com.android.wifi.dialog com.android.wifi.resources com.qorvo.uwb; do \subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN='$apex'/emailAddress=android@android.com'; \~/.android-certs/make_key ~/.android-certs/$apex "$subject"; \openssl pkcs8 -in ~/.android-certs/$apex.pk8 -inform DER -out ~/.android-certs/$apex.pem; \
done
创建密码文件
touch ~/.android-certs/ANDROID_PW_FILE
文件内容
[[[ 812330500 ]]] ~/.android-certs/bluetooth
[[[ 812330500 ]]] ~/.android-certs/com.android.adbd
[[[ 812330500 ]]] ~/.android-certs/com.android.adservices
[[[ 812330500 ]]] ~/.android-certs/com.android.adservices.api
[[[ 812330500 ]]] ~/.android-certs/com.android.appsearch
[[[ 812330500 ]]] ~/.android-certs/com.android.art
[[[ 812330500 ]]] ~/.android-certs/com.android.bluetooth
[[[ 812330500 ]]] ~/.android-certs/com.android.btservices
[[[ 812330500 ]]] ~/.android-certs/com.android.cellbroadcast
[[[ 812330500 ]]] ~/.android-certs/com.android.compos
[[[ 812330500 ]]] ~/.android-certs/com.android.connectivity.resources
[[[ 812330500 ]]] ~/.android-certs/com.android.conscrypt
[[[ 812330500 ]]] ~/.android-certs/com.android.extservices
[[[ 812330500 ]]] ~/.android-certs/com.android.hotspot2.osulogin
[[[ 812330500 ]]] ~/.android-certs/com.android.i18n
[[[ 812330500 ]]] ~/.android-certs/com.android.ipsec
[[[ 812330500 ]]] ~/.android-certs/com.android.media
[[[ 812330500 ]]] ~/.android-certs/com.android.media.swcodec
[[[ 812330500 ]]] ~/.android-certs/com.android.mediaprovider
[[[ 812330500 ]]] ~/.android-certs/com.android.nearby.halfsheet
[[[ 812330500 ]]] ~/.android-certs/com.android.networkstack.tethering
[[[ 812330500 ]]] ~/.android-certs/com.android.neuralnetworks
[[[ 812330500 ]]] ~/.android-certs/com.android.ondevicepersonalization
[[[ 812330500 ]]] ~/.android-certs/com.android.os.statsd
[[[ 812330500 ]]] ~/.android-certs/com.android.permission
[[[ 812330500 ]]] ~/.android-certs/com.android.resolv
[[[ 812330500 ]]] ~/.android-certs/com.android.runtime
[[[ 812330500 ]]] ~/.android-certs/com.android.safetycenter.resources
[[[ 812330500 ]]] ~/.android-certs/com.android.scheduling
[[[ 812330500 ]]] ~/.android-certs/com.android.sdkext
[[[ 812330500 ]]] ~/.android-certs/com.android.support.apexer
[[[ 812330500 ]]] ~/.android-certs/com.android.telephony
[[[ 812330500 ]]] ~/.android-certs/com.android.tethering
[[[ 812330500 ]]] ~/.android-certs/com.android.tzdata
[[[ 812330500 ]]] ~/.android-certs/com.android.uwb
[[[ 812330500 ]]] ~/.android-certs/com.android.uwb.resources
[[[ 812330500 ]]] ~/.android-certs/com.android.virt
[[[ 812330500 ]]] ~/.android-certs/com.android.vndk.current
[[[ 812330500 ]]] ~/.android-certs/com.android.wifi
[[[ 812330500 ]]] ~/.android-certs/com.android.wifi.dialog
[[[ 812330500 ]]] ~/.android-certs/com.android.wifi.resources
[[[ 812330500 ]]] ~/.android-certs/com.qorvo.uwb
[[[ 812330500 ]]] ~/.android-certs/media
[[[ 812330500 ]]] ~/.android-certs/networkstack
[[[ 812330500 ]]] ~/.android-certs/platform
[[[ 812330500 ]]] ~/.android-certs/releasekey
[[[ 812330500 ]]] ~/.android-certs/sdk_sandbox
[[[ 812330500 ]]] ~/.android-certs/shared
[[[ 812330500 ]]] ~/.android-certs/cyngn-app
[[[ 812330500 ]]] ~/.android-certs/testcert
[[[ 812330500 ]]] ~/.android-certs/testkey
[[[ 812330500 ]]] ~/.android-certs/verity
导入密码文件
export ANDROID_PW_FILE=/home/wjs/.android-certs/ANDROID_PW_FILE
重新编译
make clean
make mrproper
以下命令代替编译指令
mka target-files-package otatools
生成签名的固件
sign_target_files_apks -o -d ~/.android-certs \--extra_apks com.android.adbd.apex=$HOME/.android-certs/com.android.adbd \--extra_apex_payload_key com.android.adbd.apex=$HOME/.android-certs/com.android.adbd.pem \--extra_apks com.android.adservices.apex=$HOME/.android-certs/com.android.adservices \--extra_apex_payload_key com.android.adservices.apex=$HOME/.android-certs/com.android.adservices.pem \--extra_apks com.android.adservices.api.apex=$HOME/.android-certs/com.android.adservices.api \--extra_apex_payload_key com.android.adservices.api.apex=$HOME/.android-certs/com.android.adservices.api.pem \--extra_apks com.android.appsearch.apex=$HOME/.android-certs/com.android.appsearch \--extra_apex_payload_key com.android.appsearch.apex=$HOME/.android-certs/com.android.appsearch.pem \--extra_apks com.android.art.apex=$HOME/.android-certs/com.android.art \--extra_apex_payload_key com.android.art.apex=$HOME/.android-certs/com.android.art.pem \--extra_apks com.android.bluetooth.apex=$HOME/.android-certs/com.android.bluetooth \--extra_apex_payload_key com.android.bluetooth.apex=$HOME/.android-certs/com.android.bluetooth.pem \--extra_apks com.android.btservices.apex=$HOME/.android-certs/com.android.btservices \--extra_apex_payload_key com.android.btservices.apex=$HOME/.android-certs/com.android.btservices.pem \--extra_apks com.android.cellbroadcast.apex=$HOME/.android-certs/com.android.cellbroadcast \--extra_apex_payload_key com.android.cellbroadcast.apex=$HOME/.android-certs/com.android.cellbroadcast.pem \--extra_apks com.android.compos.apex=$HOME/.android-certs/com.android.compos \--extra_apex_payload_key com.android.compos.apex=$HOME/.android-certs/com.android.compos.pem \--extra_apks com.android.connectivity.resources.apex=$HOME/.android-certs/com.android.connectivity.resources \--extra_apex_payload_key com.android.connectivity.resources.apex=$HOME/.android-certs/com.android.connectivity.resources.pem \--extra_apks com.android.conscrypt.apex=$HOME/.android-certs/com.android.conscrypt \--extra_apex_payload_key com.android.conscrypt.apex=$HOME/.android-certs/com.android.conscrypt.pem \--extra_apks com.android.extservices.apex=$HOME/.android-certs/com.android.extservices \--extra_apex_payload_key com.android.extservices.apex=$HOME/.android-certs/com.android.extservices.pem \--extra_apks com.android.hotspot2.osulogin.apex=$HOME/.android-certs/com.android.hotspot2.osulogin \--extra_apex_payload_key com.android.hotspot2.osulogin.apex=$HOME/.android-certs/com.android.hotspot2.osulogin.pem \--extra_apks com.android.i18n.apex=$HOME/.android-certs/com.android.i18n \--extra_apex_payload_key com.android.i18n.apex=$HOME/.android-certs/com.android.i18n.pem \--extra_apks com.android.ipsec.apex=$HOME/.android-certs/com.android.ipsec \--extra_apex_payload_key com.android.ipsec.apex=$HOME/.android-certs/com.android.ipsec.pem \--extra_apks com.android.media.apex=$HOME/.android-certs/com.android.media \--extra_apex_payload_key com.android.media.apex=$HOME/.android-certs/com.android.media.pem \--extra_apks com.android.media.swcodec.apex=$HOME/.android-certs/com.android.media.swcodec \--extra_apex_payload_key com.android.media.swcodec.apex=$HOME/.android-certs/com.android.media.swcodec.pem \--extra_apks com.android.mediaprovider.apex=$HOME/.android-certs/com.android.mediaprovider \--extra_apex_payload_key com.android.mediaprovider.apex=$HOME/.android-certs/com.android.mediaprovider.pem \--extra_apks com.android.nearby.halfsheet.apex=$HOME/.android-certs/com.android.nearby.halfsheet \--extra_apex_payload_key com.android.nearby.halfsheet.apex=$HOME/.android-certs/com.android.nearby.halfsheet.pem \--extra_apks com.android.networkstack.tethering.apex=$HOME/.android-certs/com.android.networkstack.tethering \--extra_apex_payload_key com.android.networkstack.tethering.apex=$HOME/.android-certs/com.android.networkstack.tethering.pem \--extra_apks com.android.neuralnetworks.apex=$HOME/.android-certs/com.android.neuralnetworks \--extra_apex_payload_key com.android.neuralnetworks.apex=$HOME/.android-certs/com.android.neuralnetworks.pem \--extra_apks com.android.ondevicepersonalization.apex=$HOME/.android-certs/com.android.ondevicepersonalization \--extra_apex_payload_key com.android.ondevicepersonalization.apex=$HOME/.android-certs/com.android.ondevicepersonalization.pem \--extra_apks com.android.os.statsd.apex=$HOME/.android-certs/com.android.os.statsd \--extra_apex_payload_key com.android.os.statsd.apex=$HOME/.android-certs/com.android.os.statsd.pem \--extra_apks com.android.permission.apex=$HOME/.android-certs/com.android.permission \--extra_apex_payload_key com.android.permission.apex=$HOME/.android-certs/com.android.permission.pem \--extra_apks com.android.resolv.apex=$HOME/.android-certs/com.android.resolv \--extra_apex_payload_key com.android.resolv.apex=$HOME/.android-certs/com.android.resolv.pem \--extra_apks com.android.runtime.apex=$HOME/.android-certs/com.android.runtime \--extra_apex_payload_key com.android.runtime.apex=$HOME/.android-certs/com.android.runtime.pem \--extra_apks com.android.safetycenter.resources.apex=$HOME/.android-certs/com.android.safetycenter.resources \--extra_apex_payload_key com.android.safetycenter.resources.apex=$HOME/.android-certs/com.android.safetycenter.resources.pem \--extra_apks com.android.scheduling.apex=$HOME/.android-certs/com.android.scheduling \--extra_apex_payload_key com.android.scheduling.apex=$HOME/.android-certs/com.android.scheduling.pem \--extra_apks com.android.sdkext.apex=$HOME/.android-certs/com.android.sdkext \--extra_apex_payload_key com.android.sdkext.apex=$HOME/.android-certs/com.android.sdkext.pem \--extra_apks com.android.support.apexer.apex=$HOME/.android-certs/com.android.support.apexer \--extra_apex_payload_key com.android.support.apexer.apex=$HOME/.android-certs/com.android.support.apexer.pem \--extra_apks com.android.telephony.apex=$HOME/.android-certs/com.android.telephony \--extra_apex_payload_key com.android.telephony.apex=$HOME/.android-certs/com.android.telephony.pem \--extra_apks com.android.tethering.apex=$HOME/.android-certs/com.android.tethering \--extra_apex_payload_key com.android.tethering.apex=$HOME/.android-certs/com.android.tethering.pem \--extra_apks com.android.tzdata.apex=$HOME/.android-certs/com.android.tzdata \--extra_apex_payload_key com.android.tzdata.apex=$HOME/.android-certs/com.android.tzdata.pem \--extra_apks com.android.uwb.apex=$HOME/.android-certs/com.android.uwb \--extra_apex_payload_key com.android.uwb.apex=$HOME/.android-certs/com.android.uwb.pem \--extra_apks com.android.uwb.resources.apex=$HOME/.android-certs/com.android.uwb.resources \--extra_apex_payload_key com.android.uwb.resources.apex=$HOME/.android-certs/com.android.uwb.resources.pem \--extra_apks com.android.virt.apex=$HOME/.android-certs/com.android.virt \--extra_apex_payload_key com.android.virt.apex=$HOME/.android-certs/com.android.virt.pem \--extra_apks com.android.vndk.current.apex=$HOME/.android-certs/com.android.vndk.current \--extra_apex_payload_key com.android.vndk.current.apex=$HOME/.android-certs/com.android.vndk.current.pem \--extra_apks com.android.wifi.apex=$HOME/.android-certs/com.android.wifi \--extra_apex_payload_key com.android.wifi.apex=$HOME/.android-certs/com.android.wifi.pem \--extra_apks com.android.wifi.dialog.apex=$HOME/.android-certs/com.android.wifi.dialog \--extra_apex_payload_key com.android.wifi.dialog.apex=$HOME/.android-certs/com.android.wifi.dialog.pem \--extra_apks com.android.wifi.resources.apex=$HOME/.android-certs/com.android.wifi.resources \--extra_apex_payload_key com.android.wifi.resources.apex=$HOME/.android-certs/com.android.wifi.resources.pem \--extra_apks com.qorvo.uwb.apex=$HOME/.android-certs/com.qorvo.uwb \--extra_apex_payload_key com.qorvo.uwb.apex=$HOME/.android-certs/com.qorvo.uwb.pem \$OUT/obj/PACKAGING/target_files_intermediates/*-target_files-*.zip \signed-target_files.zip
生成OTA包
ota_from_target_files -k ~/.android-certs/releasekey \--block --backup=true \signed-target_files.zip \signed-ota_update.zip
注:OTA包既可以用代码RecoverySystem.installPackage模式、AB模式。也可以用adb命令模式
安装驱动
sudo gedit /etc/udev/rules.d/51-android.rules
文件内容
#android
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666"
#fastboot
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1",ATTRS{idProduct}=="d00d",MODE="0666"
#recovery
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1",ATTRS{idProduct}=="d001",MODE="0666"
#充电模式
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6",ATTRS{idProduct}=="f000",MODE="0666"
attr和attrs可以用lsusb命令查看
添加运行权限
sudo chmod a+rx /etc/udev/rules.d/51-android.rules
输入以下命令
echo "0x2717" > ~/.android/adb_usb.ini
重启服务
sudo service udev restart
#重启adb
adb kill-server
adb start-server
adb devices
adb命令刷机
adb sideload signed-ota_update.zip
注:系统签名过的所以需要刷recovery,这样ota不会提示签名错误
fastboot flash boot boot.img
fastboot flash recovery recovery.img
github DNS A记录
#github hosts
140.82.112.3 github.com
199.232.5.194 github.global.ssl.fastly.net
54.231.114.219 github-cloud.s3.amazonaws.com
其他命令
#查看OTA是否是AB分区
adb shell getprop ro.build.ab_update
#查看APK签名
keytool -printcert -file COM_TENC.RSA
#查看pem签名
keytool -printcert -file platform.x509.pem
#查看keystore签名
keytool -list -v -keystore system_signature.keystore
Linux给apk系统签名
cp /mnt/NVME/out/host/linux-x86/framework/signapk.jar /mnt/Mix2s/sign/signapk.jar
cp /mnt/NVME/out/host/linux-x86/lib64/libconscrypt_openjdk_jni.so /mnt/Mix2s/sign/libconscrypt_openjdk_jni.so
export LD_LIBRARY_PATH=/mnt/Mix2s/sign/
java -jar signapk.jar platform.x509.pem platform.pk8 app-release-unsigned.apk app-release.apk
window给apk系统签名
jarsigner -verbose -keystore game.jks -storepass 812330500 -signedjar modify_signed.apk modify.apk 314232332
apk解包和打包
java -jar .\apktool_2.9.0.jar d -f .\tanke.apk -o out
java -jar .\apktool_2.9.0.jar b -o modify.apk out
ASFP调试Framework代码
aidegen framework -i s -s -a
ASFP调试Settings代码
aidegen Settings -i s -s
编译SDK
source build/envsetup.sh
lunch lineage_sdk_phone_x86_64-eng
mka sdk
启动模拟器
emulator