breakfast oneplus3
命令的主要作用是
1.執行 vendorsetup.sh
2. variant 默認設置為 userdebug
3. 根據機型判斷 調用 lunch cm 或是 lineage
breakfast () { target=$1; local variant=$2; CM_DEVICES_ONLY="true"; unset LUNCH_MENU_CHOICES; add_lunch_combo full-eng; for f in `/bin/ls vendor/cm/vendorsetup.sh 2> /dev/null`; do echo "including $f"; . $f; done; unset f; if [ $# -eq 0 ]; then lunch; else echo "z$target" | grep --color=auto -q "-"; if [ $? -eq 0 ]; then lunch $target; else if [ -z "$variant" ]; then variant="userdebug"; fi; if ! check_product lineage_$target && check_product cm_$target; then echo "** Warning: '$target' is using CM-based makefiles. This will be deprecated in the next major release."; lunch cm_$target-$variant; else lunch lineage_$target-$variant; fi; fi; fi; return $? }
命令:brunch oneplus3
本質是調用mka 命令
mka
mka () { local T=$(gettop); if [ "$T" ]; then case `uname -s` in Darwin) make -C $T -j `sysctl hw.ncpu|cut -d" " -f2` "$@" ;; *) mk_timer schedtool -B -n 10 -e ionice -n 7 make -C $T -j$(grep "^processor" /proc/cpuinfo | wc -l) "$@" //調用make命令 ;; esac; else echo "Couldn't locate the top of the tree. Try setting TOP."; fi }
使用mmm 或 mmma 或 mm 或 mma 編譯失敗
使用 make 模塊名 卻可以成功
--------
獲取boot.img system.img 等鏡像
首先需要手機root權限
查看 /dev/.....
1. recover.img 和 boot.img 是一種文件類型,用 unpackbootimg 解包img ,mkbootimg 制作img (項目位置 aosp安卓源碼的 /system/core/mkbootimg 目錄下),解包后用 cat ramdisk文件 | cpio -i 的方式再解包 ramdisk ( 打包所需要的參數要和解包后的參數文件中給出的要一致,打包參數為16進制,需要再參數值前加 0x 前綴)
2. system.img userdata.img 是另一類文件類型
寫入:
制作好的 boot.img 用 adb push 放到 /sdcard ,然后重啟進入twrp,安裝鏡像即可
或者 先將 /dev/null > /dev/分區對應塊設備 ,然后將img > 寫入塊設備
查看分區和塊設備的對應關系:
低版本系統: /dev/mtd
高版本系統:
-----
以下為流水賬
-----
Android_Id
當設備在第一次啟動時,系統會隨機產生一個64位的數字,然后以16進制的形式保存在設備上,且API提供了獲取這一參數的方法:
Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);
當設備重新初始化或者刷機的時候,會被重置
1.不同的設備可能會產生相同的android_id。
2.有的廠商設備無法獲取android_id,會返回null。
3.對於CDMA的設備,ANDROID_ID和TelephonyManager.getDeviceId() 的值相同。
4.不同的android系統版本穩定性不同。
//低版本穩定,高版本不穩定
295a4fbf716094ee
IMEI
手機序列號 15-17 位,一般為15位,雙卡雙待有2個IMEI
用於在移動電話網絡中識別每一部獨立的手機等移動通信設備,相當於移動電話的身份證。序列號共有15~17位數字,前8位(TAC)是型號核准號碼(早期為6位),是區分手機品牌和型號的編碼。接着2位(FAC)是最后裝配號(僅在早期機型中存在),代表最終裝配地代碼。后6位(SNR)是串號,代表生產順序號。最后1位(SP)一般為0,是檢驗碼,備用。國際移動設備識別碼一般貼於機身背面與外包裝上
第一部分 TAC,Type Allocation Code,類型分配碼,由8位數字組成(早期是6位),是區分手機品牌和型號的編碼,該代碼由GSMA及其授權機構分配。其中TAC碼前兩位又是分配機構標識(Reporting Body Identifier),是授權IMEI碼分配機構的代碼,如01為美國CTIA,35為英國BABT,86為中國TAF。
第二部分 FAC,Final Assembly Code,最終裝配地代碼,由2位數字構成,僅在早期TAC碼為6位的手機中存在,所以TAC和FAC碼合計一共8位數字。FAC碼用於生產商內部區分生產地代碼。
第三部分 SNR,Serial Number,序列號,由第9位開始的6位數字組成,區分每部手機的生產序列號。
第四部分 CD,Check Digit,驗證碼,由前14位數字通過Luhn算法計算得出。(也稱為“模10”(Mod 10)算法, 它不是一種安全的加密哈希函數,設計它的目的只是防止意外出錯而不是惡意攻擊。)
- 從校驗位開始,從右往左,偶數位乘2(例如,7*2=14),然后將兩位數字的個位與十位相加(例如,10:1+0=1,14:1+4=5);
- 把得到的數字加在一起(本例中得到67);
- 將數字的和取模10(本例中得到7),再用10去減(本例中得到3),得到校驗位。
第五部分 SVN,Software Version Number,軟件版本號,區分同型號手機出廠時使用的不同軟件版本,僅在部分品牌的部分機型中存在.(有的話就是2位))
TAC-(FAC)-SNR-CD-SVN
設備品牌和型號 – 裝配地代碼 – 序列號
2位RBI 分配機構標識 6位品牌和型號 - (2位數字(生產商內部編碼)) - 6位序列號數字 – 1位數字Luhn驗證碼 – (2位數字(一般不存在)軟件版本號)
86 123456 ,123456,1
1.新格式
8 + 6 + 1 = 15 ( 15 + 2 = 17)
TT TTTTTT,SSSSSS,C (,SS)
2.老格式
6 + 2 + 6 + 1 = 15 (15 + 2 = 17)
TTTTTT,FF,SSSSSS,C (,SS)
硬件序列號(SERIAL)
Build.SERIAL
可能不存在
WTK7N16923005607
指紋
Build.FINGERPRINT
由設備的多個信息拼接合成。
honor/FRD-AL00/HWFRD:6.0/HUAWEIFRD-AL00/C00B171:user/release-keys
手機號碼
IMSI
WIFI-MAC
WIFI-Name
安卓系統版本 Build.VERSION.SDK_INT Build.VERSION.RELEASE
ROM固件 Build.TIME 固件推出日期 Build.getRadioVersion() 獲取無線電固件版本 Build.VERSION.BASE_OS 基帶版本
手機型號 Build.HARDWARE Build.BOARD 主板 Build.MANUFACTURER 產品/硬件的制造商 Build.MODEL 型號 Build.PRODUCT 產品的名稱 Build.DISPLAY 構建id號
手機品牌 Build.MANUFACTURER 產品/硬件的制造商 Build.HOST (可能可以由用戶修改,主機名字)
CPU型號 /device/cpu/*
手機制造商 Build.MANUFACTURER 產品/硬件的制造商
GPS定位
通話記錄模擬、手機短信模擬、等各類安卓手機系統信息的修改工具
在不需要用戶權限的前提下,網上最完美的方案是將android_id和硬件序列號,如果其中任意一種失效就使用另外一種
其他可能使用的信息
4.Build.TIME 固件推出日期 示例:1477442228000
5.Build.VERSION.INCREMENTAL 源碼控制版本號 示例: C00B171
6.Build.getRadioVersion() 獲取無線電固件版本 示例:21.210.03.00.031,21.210.03.00.031
7.Build.HARDWARE 硬件名稱 示例:hi3650
8.Build.VERSION.SECURITY_PATCH 用戶可見安全補丁level(這里我得到的是日期,可能是補丁修復的時間)示例:2016-10-01
9.當前設備是12/24時制:Settings.System.getString(context.getContentResolver(), Settings.System.TIME_12_24) 示例:null(有的手機可以獲取)
10.Build.VERSION.SDK_INT SDK版本號 (一般講是與系統版本號一一對應的) 示例:23
11.Build.SUPPORTED_32_BIT_ABIS 支持32位ABIs的列表(數值)示例:[armeabi-v7a,armeabi]
12.Build.SUPPORTED_64_BIT_ABIS 支持64位ABIs的列表(數值)示例:[arm64-v8a]
13.Build.BOOTLOADER 系統啟動程序版本號 示例:unknown
14.Build.VERSION.RELEASE 用戶可見版本 示例: 6.0
- Build.SUPPORTED_ABIS 支持ABIs的列表(數值)示例:[arm64-v8a,armeabi-v7a,armeabi]
16.Build.BOARD 主板 示例:FRD-AL00
17.Build.BRAND 系統定制商 示例:honor
- Build.CPU_ABI CPU指令集 示例:arm64-v8a
- Build.CPU_ABI2 CPU指令集2 示例:空值
- Build.DEVICE 設備參數 示例:HWFRD
21.Build.HOST 示例:huawei-RH2288H-V2-12L
- Build.ID 修訂版本列表 示例:HUAWEIFRD-AL00
23.Build.MANUFACTURER 產品/硬件的制造商 示例:HUAWEI
- Build.MODEL 示例:FRD-AL00
25.Build.PRODUCT 產品的名稱 示例:FRD-AL00
26.Build.TAGS 描述Build的標簽(Comma-separated tags describing the build, like "unsigned,debug".) 示例:release-keys
- Build.TYPE 描述Build的類型(The type of build, like "user" or "eng".) 示例:user
28.Build.USER 描述Build的USER 示例:jslave
- Build.DISPLAY A build ID string meant for displaying to the user 示例:FRD-AL00C00B171
30.Build.VERSION.CODENAME 當前開發代號,或者字符串“REL”(如果是正式的發布版本) 示例: REL
31.Build.VERSION.BASE_OS 基帶版本 The base OS build the product is based on. 示例:空值
32.自定義字符串或自定義數組
ROM
Android系統文件系統分區
Boot system recovery data cache misc
Sd卡文件系統分區
Sd卡
Sd-ext
/boot
啟動分區,包括kernel和 ramdisk(如proc等文件系統的結構包含在這(整個根文件系統))
刷機包中有/boot 的寫入,代表會修改kernel或ramdisk
Boot.img
/system
包含android系統,除kernel外的部分,framwork包含在這里,HAL的驅動是否包含在這里呢?(vendor)
System.img
/data
用戶應用程序的安裝分區,如 /data/data/app*
Userdata.img
/cache
緩存
/misc
包含一些開關配置,CID ,運營商區域ID,USB配置,硬件設置等(那VENDRO相關的信息會存在這里嗎?)
如果它已損壞或丟失,設備的某些功能將無法正常運行。
/sdcard
Sd卡
/sd-ext
Data2ext 或 app2sd 可以支持把應用安裝到此分區所在的sd卡上
/recovery
例如 Twrp安裝在這里
LinageOS
第三方的開源ROM,支持機型比較多
安裝:
- 解鎖手機bootloader(官方工具支持)
- 通過bootloader刷第三方 twrp recover (通過fastboot 刷 /recover 的img)
- 通過twrp 刷linageOS對應機型的ROM 的 img文件
升級:
- 設置里點更新系統
- 從PC端用linageOS官方出的升級腳本 push_update
- 手機進入sidload(Recovery模式),在pc 用 adb sideload 加載要刷的zip包
降級:
和重新安裝系統一樣
下載 linageOS 14.1 源碼
Git,repo 都下好
但是 repo init 的時候提示一個錯誤
於是單獨clone repo 下載
git clone -v https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
結果還是失敗
Cloning into 'git-repo'...
fatal: unable to access 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo/': Failed to connect to gerrit-googlesource.lug.ustc.edu.cn port 443: Connection refused
后來將地址換為
git clone https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
然后將 當前目錄下的 git-repo 文件夾重新命名為 repo 移動到當前目錄的.repo 下
然后執行
repo init -u https://github.com/LineageOS/android.git -b cm-14.1
最然中間報了個錯
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.
remote: Enumerating objects: 5286, done.
但最后
成功了!
這種莫名奇妙的換url,而且也不知道新的url換成了什么,感到十分困惑
而且 googlesource 的 repo 和 mirrors.tuna 的repo 下載后是不一樣的。。。
接下來用
~/bin/repo sync
還是提示很多失敗
error: Cannot fetch device/common from https://android.googlesource.com/device/common
fatal: unable to access 'https://android.googlesource.com/platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.8/': Failed to connect to android.googlesource.com port 443: Connection refused
估計是科(ke)學(xue)上(shang)網(wang)的問題
android.googlesource.com
換成國內鏡像
打開.repo/manifest.xml,將
<remote name="github"
fetch=".."
review="review.lineageos.org" />
改成
<remote name="github"
fetch="https://github.com/" />
<remote name="lineage"
fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
review="review.lineageos.org" />
將
<remote name="aosp"
fetch="https://android.googlesource.com"
改成
<remote name="aosp"
fetch="https://aosp.tuna.tsinghua.edu.cn"
將
<default revision="..."
remote="github"
改成
<default revision="..."
remote="lineage"
最后運行
repo sync --no-clone-bundle
正常了
編譯一加3T 手機 CM 14.1 ROM
源碼下載好后,需要將特定手機型號的驅動等特有代碼准備好
參考http://www.kokojia.com/article/17859.html
方法1. 使用腳本從手機中提取出驅動(是哪些?原理是?)
參考 https://www.cnblogs.com/jiaoxiake/p/6875864.html
方法2. 從網上下現有的驅動
找到設備相關代碼
https://github.com/TheMuppets/proprietary_vendor_oneplus/tree/cm-14.1/oneplus3
該倉庫下的 cm14.1分支中的 oneplus3 文件夾
參考 https://www.jianshu.com/p/44f359c40ceb
方法3. LineageOS卡刷包中獲取。
步驟1. 下載linageOS公共部分代碼
考慮到需要的驅動也許和特定版本的ROM是匹配的(兼容性問題),所以選擇在github上下載cm14.1分支的驅動,而不去提取手機中的(我手機上是高於7.1的版本的系統)
選擇方法2
首先執行
source build/envsetup.sh
breakfast oneplus3 // breakfast "device name"這里是同步機型的信息以及內核文件
就會開始從LineageOS 下載設備相關內核等源碼
<manifest>
<project name="LineageOS/android_device_oneplus_oneplus3" path="device/oneplus/oneplus3" remote="github" />
<project name="LineageOS/android_device_oppo_common" path="device/oppo/common" remote="github" />
<project name="LineageOS/android_kernel_oneplus_msm8996" path="kernel/oneplus/msm8996" remote="github" />
<project name="LineageOS/android_vendor_nxp-nfc_opensource_frameworks" path="vendor/nxp-nfc/opensource/frameworks" remote="github" />
<project name="LineageOS/android_vendor_nxp-nfc_opensource_libnfc-nci" path="vendor/nxp-nfc/opensource/libnfc-nci" remote="github" />
<project name="LineageOS/android_vendor_nxp-nfc_opensource_Nfc" path="vendor/nxp-nfc/opensource/Nfc" remote="github" />
</manifest>
這一步主要下載kernel,Vendor,device 等文件夾下的文件
這里的remote屬性指定的是 .repo/manifest.xml 中定義的遠程倉庫,如
<remote name="github"
fetch="https://github.com/" />
接着,根據網絡情況等意外因素出現各種問題
問題1.
下載到一半網絡問題導致卡住
Fetching project LineageOS/android_hardware_broadcom_wlan
問題2.
443
fatal: unable to access 'https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android_frameworks_minikin/': Failed to connect to mirrors.tuna.tsinghua.edu.cn port 443: Connection refused
把manifest.xml 里的 linage 倉庫地址改成 github上的,不用鏡像服務器試試
文件不存在?
產生問題3.
fatal: unable to access 'https://github.com/LineageOS/android_packages_providers_ContactsProvider/': Operation timed out after 0 milliseconds with 0 out of 0 bytes received
鏈接超時?
問題4.
設備特有代碼
^Cerror: Cannot fetch LineageOS/android_device_qcom_common from https://github.com/LineageOS/android_device_qcom_common
aborted by user
如果網絡問題比較嚴重,而每次執行上面命令或 repo sync 都會檢測已經同步過的倉庫,會非常耗費時間
可以手動下載需要的依賴倉庫中的文件到指定目錄
方式:
依賴鏈的頭可以從第一個倉庫中找到
android_device_oneplus_oneplus3 中的 lineage.dependencies
[ |
|
|
{ |
|
"repository": "android_device_qcom_common", |
|
"target_path": "device/qcom/common" |
|
}, |
|
{ |
|
"repository": "android_packages_resources_devicesettings", |
|
"target_path": "packages/resources/devicesettings" |
|
} |
|
] |
Repository 是依賴的其他倉庫
device/qcom/common 是從該倉庫下載文件放到的目錄
其他倉庫也能依賴另外的倉庫,所以打開被依賴倉庫的時候也需要看有沒 lineage.dependencies 存在
還有一種情況是aosp或lineageOS 依賴的項目無法下載下來,可能是鏡像中不存在這個文件
手動到github lineage中下載
問題5.
fatal: unable to access xxxxxxxx gnutls_handshake() failed: Error in the pull function.
https相關的tls握手問題。
但是為什么會失敗?
問題 6.
fatal: unable to access 'https://github.com/LineageOS/android_frameworks_opt_telephony/': GnuTLS recv error (-9): A TLS packet with unexpected length was received.
解決
用openssl 替換 gnutls 重新編譯git
重新編譯git
ubuntu16.04需要
點擊系統右上角,系統設置-》軟件&更新-》並啟用“源代碼”
然后點確定更新
然后運行
sudo apt-get build-dep git
輸入 yes
Mkdir gitopenssl
Cd gitopenssl
apt-get source git
在debian/control 文件中
替換所有 libcurl4-gnutls-dev 為 libcurl4-openssl-dev
在debian/rules文件中
刪除 "TEST =test" 行
執行
sudo apt-get install libcurl4-openssl-dev
安裝依賴的openssl包
sudo dpkg-buildpackage -rfakeroot –b
構建安裝包
可能提示的錯誤
dpkg-checkbuilddeps: error: Unmet build dependencies: libcurl4-openssl-dev
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
解決:
在執行完 sudo apt-get build-dep git
之后執行 sudo apt-get install libcurl4-openssl-dev
完成后可能提示
gpg: skipped "Leonidas S. Barbosa <leo.barbosa@canonical.com>": No secret key
gpg: dpkg-sign.jvQVk_ef/git_2.7.4-0ubuntu1.6_amd64.changes: clearsign failed: No secret key
dpkg-buildpackage: error: failed to sign .changes file
簽名問題,不用管。
返回上級目錄,會看到
git_2.7.4-0ubuntu1.6_amd64.deb
運行dpkg -i ./git_2.7.4-0ubuntu1.6_amd64.deb
安裝
再次 repo sync
結果還是有很多報錯
fatal: unable to access 'https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android_packages_apps_EmergencyInfo/': Unknown SSL protocol error in connection to mirrors.tuna.tsinghua.edu.cn:443
fatal: unable to access 'https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/cve_tracker/': SSL read: error:00000000:lib(0):func(0):reason(0), errno 104
fatal: unable to access 'https://github.com/LineageOS/android_packages_apps_WundergroundWeatherProvider/': Failed to connect to github.com port 443: Connection refused
沒有去追根求底,只想趕快解決
各種網絡問題。手動一個個下吧。。。
下好了並解壓,根據 manifest.xml 中配置的path 放到對應目錄
當aosp和lineageOS的機型無關代碼同步好了后
步驟2. 下載設備相關部分代碼
2.1同步設備公開代碼
把當前用於同步的 repo 文件復制到 ~/bin/repo
接下來運行
Breakfast oneplus3
這條命令會把一些機型相關代碼的倉庫同步下來(並且會在.repo/local_manifests/roomservice.xml中添加所需要依賴的項目),並且會用到 ~/bin/repo 文件
2.2同步設備私有庫
Github中有一個 TheMuppets 賬號,在這賬號下的倉庫集里搜 oneplus3 ,找到對應倉庫,然后做如下操作
倉庫中有一個清單的項目,里面提供了所有的清單,你只需要將對應你機型的廠商vendor的代碼添加到LineageOS/.repo/local_manifests/roomservice.xml文件中就行了
<project name="TheMuppets/proprietary_vendor_oneplus" path="vendor/oneplus" remote="github" revision="cm-14.1" />
加好后文件內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="TheMuppets/proprietary_vendor_oneplus" path="vendor/oneplus" remote="github" revision="cm-14.1">
</manifest>
然后執行 repo sync
同步過程還是太多網絡問題了
所以參考:
https://www.cnblogs.com/daimadebanyungong/p/7765218.html
使用腳本來下載(下載了很久很久,很多次)
但是注意:這個腳本用流量判斷是否卡住,但是 repo sync 有2個階段 1:網絡下載 2:在每個下好的子目錄中進行 checkout 操作
所以說用這個腳本只能解決階段1的問題,而進入了階段2可能會誤殺進程
如果看到進行到階段2了,就可以手動停止使用這個腳本,然后手動執行一次 repo sync 等他執行到
Checking out project LineageOS/android_vendor_qcom_opensource_cryptfs_hw
Checking out project LineageOS/android_vendor_qcom_opensource_dataservices
Checking out project LineageOS/android_vendor_qcom_opensource_dpm
Checking out project LineageOS/android_vendor_qcom_opensource_time-services
Syncing work tree: 100% (587/587), done.
這里 按回車 才真正完成所有的同步
另外 下載階段完成的日志會是這樣:
Checking out project LineageOS/android_device_qcom_sepolicy
Checking out project device/sample
Fetching projects: 100% (587/587)
Fetching projects: 100% (587/587), done.
如果需要用lineage 自帶腳本從真實設備中抽取文件
Adb不識別usb設備的處理辦法:
https://blog.csdn.net/u013398960/article/details/72511309
開始編譯
Croot
brunch oneplus3
遇到錯誤:
warning: string 'user_image_take_photo' has no default translation.
warning: string 'user_nickname' has no default translation.
packages/apps/EmergencyInfo/res/layout/preference_category_material_settings.xml:33: error: Error: No resource found that matches the given name (at 'fontFamily' with value '@*android:string/config_headlineFontFamilyMedium').
packages/apps/EmergencyInfo/res/layout/preference_category_material_settings.xml:33: error: Error: No resource found that matches the given name (at 'textColor' with value '@color/emergency_contacts_text_color').
packages/apps/EmergencyInfo/res/layout/restricted_popup_menu_item.xml:35: error: Error: No resource found that matches the given name (at 'layout_width' with value '@dimen/config_restricted_icon_size').
packages/apps/EmergencyInfo/res/layout/restricted_popup_menu_item.xml:35: error: Error: No resource found that matches the given name (at 'layout_height' with value '@dimen/config_restricted_icon_size').
[ 80% 27308/33878] Building bootanimation
ninja: build stopped: subcommand failed.
build/core/ninja.mk:151: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1
make: Leaving directory '/android/los/tuna-cm-14.1'
#### make failed to build some targets (02:03:22 (hh:mm:ss)) ####
單獨進packages/apps/EmergencyInfo/ 目錄用
git reset –hard
git pull lineage cm-14.1
更新了一次
結果還是不行
@*android:string/config_headlineFontFamilyMedium 是系統資源
在系統資源下找不到,@color/emergency_contacts_text_color 這類應該是app自定義的資源,更新后還是搜不到。不知解決思路是什么。
直接將整個EmergencyInfo刪除(從名字粗略的看,怕是日后地震預警之類的用不了了吧,這次編譯只是給開發機用於開發,不是日常生活用)。
繼續編譯
最后
running: java -Xmx2048m -Djava.library.path=/android/los/tuna-cm-14.1/out/host/linux-x86/lib64 -jar /android/los/tuna-cm-14.1/out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem build/target/product/security/testkey.pk8 /tmp/tmpA8djqM /android/los/tuna-cm-14.1/out/target/product/oneplus3/lineage_oneplus3-ota-9a1b472753.zip
done.
[100% 7996/7996] build bacon
Package Complete: /android/los/tuna-cm-14.1/out/target/product/oneplus3/lineage-14.1-20190811-UNOFFICIAL-oneplus3.zip
make: Leaving directory '/android/los/tuna-cm-14.1'
#### make completed successfully (57:53 (mm:ss)) ####
編譯成功了
把/android/los/tuna-cm-14.1/out/target/product/oneplus3/ lineage-14.1-20190811-UNOFFICIAL-oneplus3.zip 放到sd卡
進入twrp recover 刷入此包
重啟,進入系統
完