日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为nexus 5x编译android n固件

發(fā)布時(shí)間:2023/12/29 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为nexus 5x编译android n固件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作為安卓從業(yè)人員,我們經(jīng)常希望可以單步調(diào)試framework代碼,可以方便的調(diào)試第三方應(yīng)用。模擬器一般來說太慢,而且模擬器和官方sdk代碼一樣對應(yīng)不上。最好的辦法就是自己為nexus手機(jī)編譯userdebug固件,本文以nexus 5x為例記錄編譯實(shí)踐。

下載aosp源碼

國內(nèi)用戶建議使用清華鏡像,地址為https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ ,不贅述。
如果網(wǎng)絡(luò)不夠好,建議使用重試腳本,如

#!/bin/sh repo sync -j4 while [ $? -ne 0 ] do repo sync -j4 done

也可以參考http://blog.csdn.net/xia0pang/article/details/20281071 根據(jù)網(wǎng)速來判斷。
必要時(shí)可以使用repo sync –force-broken,可以在一個(gè)project下載失敗時(shí)繼續(xù)下載下一個(gè),而不是失敗退出。

切換分支

針對每款nexus手機(jī)的固件,aosp中都有對應(yīng)的tag,我們需要將源碼切換到對應(yīng)的branch或者tag才可以。
參照https://source.android.com/source/build-numbers ,nexus 5x對應(yīng)的最新細(xì)分版本為N4F26T,對應(yīng)的分支為android-7.1.1_r24 。也就是說我可以將aosp源碼切換到這個(gè)分支。

repo切換分支,參考http://blog.csdn.net/turui/article/details/7190676
摘抄如下

// 查看可切換的分支 cd .repo/manifests git branch -a | cut -d / -f 3// 切換到gingerbread-release分支 repo init -b gingerbread-release repo sync (not needed if your local copy is up to date) repo start gingerbread-release --all // 查看當(dāng)前的分支 repo branches

下載驅(qū)動(dòng)

aosp源碼中并不包含廠商的閉源驅(qū)動(dòng),需要手動(dòng)下載,地址為 https://developers.google.com/android/drivers
找到N4F26T對應(yīng)的驅(qū)動(dòng),分別為
https://dl.google.com/dl/android/aosp/lge-bullhead-nmf26f-7bf6caec.tgz

https://dl.google.com/dl/android/aosp/qcom-bullhead-nmf26f-fa1a80d5.tgz
目前國內(nèi)dl.google.com域名可以直接訪問,如果瀏覽器點(diǎn)擊下載鏈接遲遲沒有反應(yīng),可以復(fù)制鏈接然后使用wget下載。

下載解壓后均為.sh文件,放到aosp根目錄執(zhí)行腳本即可,中間會(huì)要求輸入I ACCEPT同意協(xié)議。

編譯環(huán)境

我使用的是ubuntu 16.04,參照官網(wǎng)中ubuntu 14.04的要求,比如使用open-jdk8,安裝必要依賴包等。

編譯

source build/envsetup.sh lunch // 選擇aosp-bullhead-userdebug make -j4

注意我們自己編譯一般選擇userdebug固件,運(yùn)行速度快而且方便調(diào)試。

這里列出兩個(gè)編譯時(shí)遇到的問題

  • Internal compiler error
    錯(cuò)誤描述如下
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp java.lang.AssertionError: java.util.zip.ZipException: duplicate entry: jayce/android/webkit/LegacyErrorStrings.jayceat com.android.sched.vfs.WriteZipFS$ZipEntryOutputStream.writeEntryIfNeeded(WriteZipFS.java:350)...at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748) Caused by: java.util.zip.ZipException: duplicate entry: jayce/android/webkit/LegacyErrorStrings.jayce... 31 moreInternal compiler error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)). java.util.zip.ZipException: duplicate entry: jayce/android/webkit/LegacyErrorStrings.jayce. Warning: This may have produced partial or corrupted output.

我的解決辦法是直接make clean然后重試

  • oom問題
    出錯(cuò)如下

    解決辦法參考http://blog.csdn.net/loongembedded/article/details/70243355 ,增加jvm堆內(nèi)存上限。
    具體做法為修改prebuilts/sdk/tools/jack-admin文件
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8-XX:+TieredCompilation -Xmx4096M}"JACK_SERVER_COMMAND="java-XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR$JACK_SERVER_VM_ARGUMENTS -Xmx4096M -cp$LAUNCHER_JAR $LAUNCHER_NAME"

各自添加-Xmx4086M

之后的編譯過程很順利,附圖

刷機(jī)

先在系統(tǒng)settings中打開oem鎖開關(guān),執(zhí)行adb reboot bootloader進(jìn)入bl界面,然后執(zhí)行fastboot flashing unlock解鎖。此時(shí)就可以開始刷機(jī)。
在源碼編譯完成后的終端執(zhí)行

fastboot flashall -w

附刷機(jī)后圖片

總結(jié)

以上是生活随笔為你收集整理的为nexus 5x编译android n固件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。