lineage编译

news/2025/2/14 6:08:34/

安装依赖 

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


http://www.ppmy.cn/news/1217290.html

相关文章

Python使用带账密的Socks5代理

测试代码如下 import requestsip 146.78.85.145 port 9527 username ********* password ********* proxies {http: fsocks5://{username}:{password}{ip}:{port},https: fsocks5://{username}:{password}{ip}:{port} } print(proxies) body requests.get("https:/…

Ubuntu安装mysql(解决ubuntu Access denied for user ‘root‘@‘localhost‘报错)

1、安装mysql sudo apt-get install mysql-server 上述命令会安装以下包: apparmor mysql-client-5.7 mysql-common mysql-server mysql-server-5.7 mysql-server-core-5.7 因此无需再安装mysql-client等。安装过程会提示设置mysql root用户的密码,设…

【管理运筹学】运筹学“背诵手册”(二) | 对偶理论与灵敏度分析

二、对偶理论与灵敏度分析 用矩阵形式表示原问题和对偶问题: max ⁡ z C X s . t . { A X ≤ b X ≥ 0 \max z\pmb{CX}\\ s.t.\begin{cases} \pmb{AX\leq b} \\ \pmb{X}\geq\pmb{0} \end{cases} maxzCXs.t.{AX≤bX≥0​ 其中 C ( c 1 , c 2 , ⋯ , c n ) , X (…

2021年12月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 点击下列哪个按钮,可以让正在运行的程序停下来? A: B: C: D: 答案:B 选项B是停止运行程序的按钮。 第2题 小乔完成了一个编程作品后,点击“文件”中的“保存到电脑”将作品保存到本地,不修改文件名字,直接点击…

医学生画图ppt

微信回复:素材 领取

【论文阅读VLDB13】Online, Asynchronous Schema Change in F1

Online, Asynchronous Schema Change in F1 ABSTRACT 在一个globally 分布式数据库,with shared data, stateless servers, and no global membership.进行一个schema演变。证明许多常见的模式更改可能会导致异常和数据库损坏,通过将破坏引起的模式更改…

【Linux】update-alternatives

安装: sudo update-alternatives --install link name path priority [ --slave slink sname spath]选项注释: link是在/usr/bin/,/usr/local/bin/等默认PATH搜索目录name是在/etc/alternatives目录中的链接名path是真正的可执行程序的位置,可以在任何位置priority是优先级 …

Python深度学习预测倍周期分岔(鸡心脏细胞聚集体自发跳动)

背景 分岔可以根据它们发生在连续还是离散时间动力系统中进行划分。 这种区别很重要,因为离散时间动力系统(微分方程)可以表现出与其连续时间对应系统(微分方程)截然不同的行为。 例如,人口增长的逻辑模型…