編譯安卓6.0的SystemUI模塊

導火索:由於公司開發的安卓終端項目要霸佔整個設備屏幕且永不退出,不允許用戶退出。所以必須要幹掉系統默認的導航欄和狀態欄,但是系統提供的api只能暫時隱藏,手指下拉或者彈窗還是會冒出來。直接刪除systemUI.apk重啓雖然可以解決但是太過粗暴,系統壁紙之類炸七雜八的東西都看不到了,於是只能通過修改SystemUI源碼,重新編譯打包替換

一.下載安卓源碼,直接通過鏡像下載比較慢,我是在網上找的別人已經下載好的源碼

地址:

鏈接:https://pan.baidu.com/s/1EYDFSFFE94w1RBPLRiOqEw 
提取碼:oyt1

二.通過xftp上傳到linux服務器(我用的是centos 7)

三.解壓源碼

yum install p7zip
7za x android-6.0.0_r1.7z -r -o./
cd android-6.0.0_r1

四.編譯源碼

根據需求將SystemUI模塊下的源文件修改後,執行下面的命令

. build/envsetup.sh
mmm /frameworks/base/packages/SystemUI

五.毫不意外的出了問題

提示我jdk版本不對,需要openjdk1.7,但我這是1.8。於是就打算替換成1.7。參照網上的教程配置完成後source file。結果查看版本還是1.8。這中間走了不少彎路,通過yum下載了openjdk1.7也從oracle官網去下載了1.7版本在本地解壓,再配置都無法替換1.8.最後參考這篇博客https://www.cnblogs.com/happyflyingpig/p/8068020.html把1.8幹掉了才把jdk替換成了oracle的1.7。結果仍然告知不匹配。最後在谷歌官方文檔中找到了這兩句

sudo update-alternatives --config java
sudo update-alternatives --config javac

切換到openjdk的1.7版本後jdk版本問題解決了,但是又出了新的問題

yum install bision
mmm /frameworks/base/packages/SystemUI

 

接着報了下面的錯誤

 

然後網上有類似的問題通過修改make文件來解決,但是問題跟這個又不完全一樣,於是參考了另一種方案,直接把項目全部編譯一遍生成緩存再編譯單個模塊,參考:https://www.jianshu.com/p/95495a72341b

一頓操作後又是令人崩潰的報錯:

提示好像是libstdc++共享庫缺失,於是安裝這個共享庫,參考https://stackoverflow.com/questions/11471722/libstdc-so-6-cannot-open-shared-object-file-no-such-file-or-directory

sudo yum install libstdc++.i686
sudo yum install libstdc++-devel.i686

最後cd 到DSystemUI目錄下

cd frameworks/base/packages/SystemUI
mmm

終於不報錯了,編譯流程開始執行,經過長達四五個小時的時間才最終編譯成功。爲什麼這麼慢,還搞不清楚

六.補充

查看了其他人的博客發現反覆報錯的原因是,沒有把準備的環境準備好,執行編譯前把下面的依賴要安裝一下

sudo yum install -y gcc make libstdc++.i686 libstdc++-devel.i686 zlib-devel openssl-devel perl cpio expat-devel gettext-devel autoconf glibc.i686 glibc-devel.i686 zlib-devel.i686 libstdc++.i686 libX11-devel.i686 ncurses-devel.i686 ncurses-libs.i686 gperf flex gcc-c++ bison patch

再次編譯這個系統,經過4個多小時編譯成功

七.產物

SystemUI.apk所在的目錄是/out/target/product/generic_arm64/system/priv-app/SystemUI

cd /out/target/product/generic_arm64/system/priv-app/SystemUI
ls

 

八.後續

又發現了一個新坑,上面那一個成功的是我在一臺虛擬機上完成的,編譯通過了,但是在此之前我在另一臺實體機上編譯卻失敗了原因居然是磁盤空間不夠,所以解壓和編譯源碼的時候務必要把源碼放到空間合適的目錄下經過測試,源碼全部編譯完後需要佔大約70個G的空間,而我失敗的那臺機器的編譯目錄只有50個G。

下面是我失敗的那一臺服務器的磁盤空間分佈情況

df -h

我這裏home目錄下空間是足夠的,但是我一開始卻選擇了再根目錄下的usr下面去編譯,導致之間不夠從而編譯失敗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章