lineage编译

安装依赖 

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 "[email protected]"

 挂载代码所在磁盘

if mountpoint -q /mnt/NVME
then
echo "------mounted--------"
else
   echo "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/[email protected]'
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'/[email protected]'; \
    ~/.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

你可能感兴趣的:(linux,运维,服务器)