為啥要編譯Android Q蠢莺?
- 大家都知道Android Q是目前Google發(fā)布的最新的Android版本,目前最新的一版Android Q bata4蝇闭,現(xiàn)在還沒有手機(jī)廠商進(jìn)行適配呻率,只有測(cè)試版本的適配方案。
- 但是我司是一個(gè)做SDK的公司呻引,SDK是打包到手機(jī)廠商的ROM中使用的礼仗。其中用到了很多系統(tǒng)級(jí)的權(quán)限,比如IMEI獲取逻悠,MAC地址獲取元践,WIFI連接配置等等。
- 為了測(cè)試SDK的兼容童谒,不得不手動(dòng)編譯Android Q 從而進(jìn)行系統(tǒng)簽名单旁,并驗(yàn)證對(duì)應(yīng)的功能的兼容性。
?
到底怎么編譯Android Q源碼?
扯了這么久饥伊,那到底怎么才能編譯Android 源碼象浑? 開始我也是帶著這個(gè)疑問一臉懵逼的查看對(duì)應(yīng)的文檔,首先我找到了這篇
https://source.android.google.cn/source/downloading
整體分為以下幾步
1.首先你得有個(gè)Ubuntu系統(tǒng)琅豆,最好是14.0以后的18.0以下的愉豺,比如我用的是Ubuntu16.0.4
2.把git,python都下好。
3.把repo工具下好(repo是一種代碼版本管理的工具茫因,是用python腳本寫的蚪拦,封裝了一堆git命令,統(tǒng)一管理代碼倉(cāng)庫(kù)用的,大概就這個(gè)功能)
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
4.新建一個(gè)文件夾驰贷,在這個(gè)新文件夾中先把Android 的源碼倉(cāng)庫(kù)同步下來盛嘿,這個(gè)倉(cāng)庫(kù)名稱叫manifest倉(cāng)庫(kù),具體方式如下
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
這個(gè)過程很容易報(bào)錯(cuò)饱苟,一般都會(huì)報(bào)無法連接到 gerrit.googlesource.com孩擂,這是因?yàn)槲覈?guó)有墻而你沒梯子。解決方式有兩種箱熬,我第一種沒解決成功类垦,如果你們也不成功可以使用第二種。
1). 編輯 ~/bin/repo文件城须,找到REPO_URL這一行,然后將其內(nèi)容修改為:
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
2). 通過以下幾步解決
- a.首先先調(diào)用git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
- b.將git-repo里面的repo文件復(fù)制到/bin目錄
- c.在同步源碼的工作目錄新建.repo文件夾
- d.把git-repo重命名為repo復(fù)制到.repo目錄下
5.通過manifest 倉(cāng)庫(kù)獲取android源碼的對(duì)應(yīng)版本源碼蚤认,比如我們想獲取Android Q的源碼可以調(diào)用
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-q-preview-2.5
6.調(diào)用同步命令 repo sync,至此Android Q源碼會(huì)啟動(dòng)下載糕伐,這個(gè)過程比較漫長(zhǎng)砰琢,中間可能會(huì)出一些小問題,可以繼續(xù)通過repo sync重試下載良瞧,它會(huì)自動(dòng)過濾已下載的文件陪汽。
7.編譯Android 源碼需要OpenJDK 8,可通過sudo apt-get install openjdk-8-jdk下載安裝褥蚯,如果之前有裝過openjdk的其他版本可以通過以下命令進(jìn)行切換
sudo update-alternative --config java
sudo update-alternative --config javac
8.編譯依賴設(shè)置挚冤,順序執(zhí)行就可以了。
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
9.一切就緒赞庶,初始化編譯環(huán)境训挡,在源碼文件夾調(diào)用 build/envsetup.sh
10. 選擇編譯目標(biāo),通過lunch命令選擇編譯目標(biāo)歧强,比如我想編譯aosp_arm64-eng澜薄,則執(zhí)行命令lunch aosp_arm64-eng
11.開始編譯,執(zhí)行命令 make -j8摊册,等待編譯完成即可肤京。
?
Android Q到底有哪些新特性?
?
編譯進(jìn)行中茅特,首先要知道Android Q到底做了什么更改(如果已經(jīng)了解蟆沫,請(qǐng)直接略過),以下是我參考Google官方對(duì)Android Q 的一些調(diào)研温治。Android Q更新了很多API,也增加了一些對(duì)應(yīng)的權(quán)限戒悠,比如...
-
范圍存儲(chǔ)
?? 更改應(yīng)用程序訪問設(shè)備外部存儲(chǔ)上文件的方式熬荆,例如存儲(chǔ)在路徑中的文件/sdcard。Android Q繼續(xù)使用 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 權(quán)限绸狐,這些權(quán)限對(duì)應(yīng)于存儲(chǔ)面向用戶的運(yùn)行時(shí)權(quán)限卤恳。但是累盗,默認(rèn)情況下針對(duì)AndroidQ的應(yīng)用(以及選擇更改的應(yīng)用)會(huì)獲得外部存儲(chǔ)的過濾視圖。此類應(yīng)用程序只能查看其特定于應(yīng)用程序的目錄和特定類型的媒體突琳,因此應(yīng)用程序無需請(qǐng)求任何其他用戶權(quán)限若债。
-
設(shè)備位置權(quán)限
增加了后臺(tái)位置權(quán)限,如果應(yīng)用需要在后臺(tái)定位需要單獨(dú)增加 ACCESS_BACKGROUND_LOCATION
-
后臺(tái)活動(dòng)限制
限制了應(yīng)用何時(shí)可以開始活動(dòng)拆融。此行為更改有助于最大限度地減少用戶的中斷蠢琳,并使用戶更好地控制屏幕上顯示的內(nèi)容
-
隱私數(shù)據(jù)限制
MAC地址,IMEI號(hào)镜豹,/proc/net/filesystem傲须,剪貼板等均控制訪問限制,其中IMEI獲取可以通過READ_PRIVILEGED_PHONE_STATE權(quán)限進(jìn)行獲取趟脂,但是該權(quán)限必須要求signature|privileged
<!-- @SystemApi Allows read access to privileged phone state.
@hide Used internally. -->
<permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
android:protectionLevel="signature|privileged" />
-
相機(jī)的getCameraCharacteristics()的返回范圍
-
Wi-Fi的啟用/關(guān)閉方法
針對(duì)Android Q的應(yīng)用無法啟用或停用Wi-Fi泰讽。該 WifiManager.setWifiEnabled()方法總是返回false。如果需要昔期,可以使用設(shè)置面板提示用戶啟用和禁用Wi-Fi已卸。
-
Wi-Fi網(wǎng)絡(luò)配置限制
Wi-Fi網(wǎng)絡(luò)列表的手動(dòng)配置限制在系統(tǒng)應(yīng)用和 設(shè)備策略控制器(DPC)中。給定的DPC可以是設(shè)備所有者或配置文件所有者硼一。