欧美亚洲综合图区在线|天天射天天干国产成卜|99久久免费国产精精品|国产的欧美一区二区三区|日韩中文字幕无码不卡专区|亚麻成人aV极品一区二区|国产成人AV区一区二区三|成人免费一区二区三区视频网站

當前位置:首頁 > 網站建設 > 正文內容

怎么修改安卓系統(tǒng)源代碼(手機怎么修改源代碼)

網站建設2年前 (2023-01-10)2849

今天給各位分享怎么修改安卓系統(tǒng)源代碼的知識,其中也會對手機怎么修改源代碼進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!

本文目錄一覽:

怎么修改app的源代碼 包括ios 和安卓的

你想要修改源代碼,首先你要拿到源代碼。

如果你拿不到,那對于iOS來說就不用想了(反編譯也就能到二進制文件,如果你感興趣也可以嘗試修改二進制文件),你是無法修改的。

對于Android,可以將apk反編譯回代碼,但是Android開發(fā)者基本都會在發(fā)布之前采取一些防反編譯的措施(比如代碼混淆),所以你可以想象拿到的代碼的可讀性…

反編譯和修改這種行為極有可能構成侵權,請尊重每個開發(fā)者,不論出于學習目的還是其他目的

app源代碼誰能改

開發(fā)程序員。

一個軟件的源代碼一般只有這個軟件的開發(fā)公司的研發(fā)人員可以修改,但一般不會修改,只是在軟件需要更新維護和需要更改部分信息時才會進行源代碼的的修改。

如果你想自己對源代碼進行修改,首先你得拿到源代碼的使用權可以購買或者直接并購公司,并且在這個基礎上還要會編程,如果只購買自己的源代碼使用權就只能在自己的軟件進行修改。

如何編輯和調試android源碼

在源碼中,存在idegen模塊,該模塊專門用來為idea工具生成系統(tǒng)源碼的project.

在開始編譯該模塊之前,首先確保你已經編譯過Android源碼了,如果沒有,可以參考上篇文章進行編譯.

和編譯普通的模塊一樣,我們用mmm命令編譯idegen.在開始編譯之前,檢查out/host/linux-x86/framework/目錄下是否存在idegen.jar文件,存在則說明你已經編譯過該模塊,否者,則需要編譯.執(zhí)行如下命令即可:

soruce build/envsetup.sh

mmm development/tools/idegen/

sudo ./development/tools/idegen/idegen.sh123123

其中mmm development/tools/idegen/執(zhí)行完成后會生成idegen.jar,而sodo ./development/tools/idegen/idegen.sh則會在源碼目錄下生成IEDA工程配置文件:android.ipr,android.iml及android.iws.

簡單的說明一下這三個文件的作用:

android.ipr:通常是保存工程相關的設置,比如編譯器配置,入口,相關的libraries等

android.iml:則是主要是描述了modules,比如modules的路徑,依賴關系等.

android.iws:則主要是包含了一些個人工作區(qū)的設置.

自己可以編譯安卓源碼嗎?

用最新的Ubuntu 16.04,請首先確保自己已經安裝了Git.沒安裝的同學可以通過以下命令進行安裝:

sudo apt-get install git git config –global user.email “test@test.com” git config –global user.name “test”

其中test@test.com為你自己的郵箱.

簡要說明

android源碼編譯的四個流程:1.源碼下載;2.構建編譯環(huán)境;3.編譯源碼;4運行.下文也將按照該流程講述.

源碼下載

由于某墻的原因,這里我們采用國內的鏡像源進行下載.

目前,可用的鏡像源一般是科大和清華的,具體使用差不多,這里我選擇清華大學鏡像進行說明.(參考:科大源,清華源)

repo工具下載及安裝

通過執(zhí)行以下命令實現repo工具的下載和安裝

mkdir ~/binPATH=~/bin:$PATHcurl ~/bin/repochmod a+x ~/bin/repo

補充說明

這里,我來簡單的介紹下repo工具,我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google采用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:

我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發(fā),我們?yōu)槊總€子項目創(chuàng)立自己的倉庫,整個項目的結構如下:

這里寫圖片描述

將一個項目Pre進行分庫后會遇到這么一個問題:如果我們想要創(chuàng)建Pre分支來做feature開發(fā),這就意味著,我們需要到每個子項目中分別創(chuàng)建對應的分支,這個過程如果純粹靠手工做,那簡直是個災難,利索當然我們會想寫個自動化處理程序(我們假設這個工具叫做RepoUtil)來幫助我們解決這個問題.這個RepoUtil也會有版本管理之類的需求,因此我們也用Git對其管理,并為其創(chuàng)建對應的倉庫.此時整個項目的結構如下:

這里寫圖片描述

這里RepoUtil知道整個項目Pre下的每個子項目(即維護子項目的列表),同時需要提供對這些子項目的管理功能,比如統(tǒng)一創(chuàng)建分支等.但是從"單一職責"角度來看,RepoUitl這個工具的功能過于復雜,我們完全可以將維護子項目列表這個功能抽取出來作為一個新項目sub_projects,因為子項目也會變化,因此,為其創(chuàng)建對應的倉庫,并用Git管理,這樣的化,RepoUtil只需要通過簡單的對ub_projects進行依賴即可,此時整個項目的結構如下:

這里寫圖片描述

AOSP項目結構和我上文的描述非常類似.repo工具對應RepoUtil,mainfest對應sub_projects.

總結一下:repo就是這么一種工具,由一系列python腳本組成,通過調用Git命令實現對AOSP項目的管理.

建立源碼文件夾

熟悉Git的同學都應該知道,我們需要為項目在本地創(chuàng)建對應的倉庫.同樣,這里為了方便對代碼進行管理,我們?yōu)槠鋭?chuàng)建一個文件夾.這里我在當前用戶目錄下創(chuàng)建了source文件夾,后面所有的下載的源碼和編譯出的產物也都放在這里,命令如下:

mkdir sourcecd source

初始化倉庫

我們將上面的source文件夾作為倉庫,現在需要來初始化這個倉庫了.通過執(zhí)行初始化倉庫命令可以獲取AOSP項目master上最新的代碼并初始化該倉庫,命令如下:

repo init -u

或者使用:

repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest

兩者實現的效果一致,僅僅只是協議不同.

如果執(zhí)行該命令的過程中,如果提示無法連接到 gerrit.googlesource.com,那么我們只需要編輯 ~/bin/repo文件,找到REPO_URL這一行,然后將其內容修改為:

REPO_URL = ''

然后重新執(zhí)行上述命令即可.

補充說明

不帶參數的manifest命令用于獲取master上最新的代碼,但是可以通過-b參數指定獲取某個特定的android版本,比如我們想要獲取android-4.0.1_r1分支,那么命令如下:

repo init -u -b android-4.0.1_r1

(AOSP項目當前所有的分支列表參看:分支列表)

同步源碼到本地

初始化倉庫之后,就可以開始正式同步代碼到本地了,命令如下:

repo sync

以后如果需要同步最新的遠程代碼到本地,也只需要執(zhí)行該命令即可.在同步過程中,如果因為網絡原因中斷,使用該命令繼續(xù)同步即可.不出意外,5個小時便可以將全部源碼同步到本地.所以呢,這個過程可以放在晚上睡覺期間完成.

(提示:一定要確定代碼完全同步了,不然在下面編譯過程出現的錯誤會讓你痛不欲生,不確定的童鞋可以多用repo sync同步幾次)

構建編譯環(huán)境

源碼下載完成后,就可以構建編譯環(huán)境了.在開始之前,我們先來看看一些編譯要求:

1. 硬件要求:

64位的操作系統(tǒng)只能編譯2.3.x以上的版本,如果你想要編譯2.3.x以下的,那么需要32位的操作系統(tǒng).

磁盤空間越多越好,至少在100GB以上.意思就是,你可以去買個大點的硬盤了啊

如果你想要在是在虛擬機運行l(wèi)inux,那么至少需要16GB的RAM/swap.

(實際上,我非常不推薦在虛擬機中編譯2.3.x以上的代碼.)

2. 軟件要求:

1. 操作系統(tǒng)要求

在AOSP開源中,主分支使用Ubuntu長期版本開發(fā)和測試的,因此也建議你使用Ubuntu進行編譯,下面我們列出不同版本的的Ubuntu能夠編譯那些android版本:

Android版本

編譯要求的Ubuntu最低版本

Android 6.0至AOSP master ? ?Ubuntu 14.04 ?

Android 2.3.x至Android 5.x ? ?Ubuntu 12.04 ?

Android 1.5至Android 2.2.x ? ?Ubuntu 10.04 ?

2. JDK版本要求

除了操作系統(tǒng)版本這個問題外,我們還需要關注JDK版本問題,為了方便,同樣我們也列出的不同Android版本的源碼需要用到的JDK版本:

Android版本

編譯要求的JDK版本

AOSP的Android主線 ? ?OpenJDK 8 ?

Android 5.x至android 6.0 ? ?OpenJDK 7 ?

Android 2.3.x至Android 4.4.x ? ?Oracle JDK 6 ?

Android 1.5至Android 2.2.x ? ?Oracle JDK 5 ?

更具體的可以參看:Google源碼編譯要求

我現在在Ubuntu 16.04下編譯AOSP主線代碼,因此需要安裝OpenJDK 8,執(zhí)行命令如下:

sudo apt-get install openjdk-8-jdk

如果你需要在Ubuntu 14.04下編譯AOSP主線代碼,同樣需要安裝OpenJDK 8,此時需要執(zhí)行如下命令:

sudo apt-get updatesudo apt-get install openjdk-8-jdk

如果你要編譯的是Android 5.x到android 6.0之間的系統(tǒng)版本,需要采用openjdk7.但是在Ubuntu 15.04及之后的版本的在線安裝庫中只支持openjdk8和openjdk9的安裝.因此,如果你想要安裝openjdk 7需要首先設置ppa:

sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update

然后再執(zhí)行安裝命令:

sudo apt-get install openjdk-7-jdk

有時候,我們需要編譯不同版本的android系統(tǒng),就可能使用不同的jdk版本.關于jdk版本切換,可以使用如下命令:

sudo update-alternative --config javasudo update-alternative --config javac

3. 其他要求

Google官方構建編譯環(huán)境指南中已經說明了Ubuntu14.04,Ubuntu 12.04,Ubuntu 10.04需要添加的依賴,這里我們就不做介紹了.我原先以為,Ubuntu16.04的設置和Ubuntu14.04的依賴設置應該差不多,但是只能說too young too simple.

下面是Ubuntu16.04中的依賴設置:

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-devsudo 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 m4sudo apt-get install lib32z-dev ccache

(其中幾個命令中參數是重復的,但不妨礙我們)

初始化編譯環(huán)境

確保上述過程完成后,接下來我們需要初始化編譯環(huán)境,命令如下:

source build/envsetup.sh

執(zhí)行該命令結果如下:

這里寫圖片描述

不難發(fā)現該命令只是引入了其他執(zhí)行腳本,至于這些腳本做什么,目前不在本文中細說.

該命令執(zhí)行成功后,我們會得到了一些有用的命令,比如最下面要用到的lunch命令.

編譯源碼

初始化編譯環(huán)境之后,就進入源碼編譯階段.這個階段又包括兩個階段:選擇編譯目標和執(zhí)行編譯.

選擇編譯目標

通過lunch指令設置編譯目標,所謂的編譯目標就是生成的鏡像要運行在什么樣的設備上.這里我們設置的編譯目標是aosp_arm64-eng,因此執(zhí)行指令:

lunch aosp_arm64-eng

編譯目標格式說明

編譯目標的格式:BUILD-BUILDTYPE,比如上面的aosp_arm-eng的BUILD是aosp_arm,BUILDTYPE是eng.

什么是BUILD

BUILD指的是特定功能的組合的特定名稱,即表示編譯出的鏡像可以運行在什么環(huán)境.其中,aosp(Android Open Source Project)代表Android開源項目;arm表示系統(tǒng)是運行在arm架構的處理器上,arm64則是指64位arm架構;處理器,x86則表示x86架構的處理器;此外,還有一些單詞代表了特定的Nexus設備,下面是常用的設備代碼和編譯目標,更多參考官方文檔

|受型號|設備代碼|編譯目標|

|---|----|---|

|Nexus 6P|angler|aosp_angler-userdebug|

|Nexus 5X|bullhead|aosp_bullhead-userdebug|

|Nexus 6|shamu|aosp_shamu-userdebug|

|Nexus 5|hammerhead|aosp_hammerhead-userdebug|

提示:如果你沒有Nexus設備,那么通常選擇arm或者x86即可

什么是BUILDTYPE

BUILD TYPE則指的是編譯類型,通常有三種:

-user:代表這是編譯出的系統(tǒng)鏡像是可以用來正式發(fā)布到市場的版本,其權限是被限制的(如,沒有root權限,不鞥年dedug等)

-userdebug:在user版本的基礎上開放了root權限和debug權限.

-eng:代表engineer,也就是所謂的開發(fā)工程師的版本,擁有最大的權限(root等),此外還附帶了許多debug工具

了解編譯目標的組成之后,我們就可以根據自己目前的情況選擇了.那不知道編譯目標怎么辦?

我們只需要執(zhí)行不帶參數的lunch指令,稍后,控制臺會列出所有的編譯目標,如下:

這里寫圖片描述

接著我們只需要輸入相應的數字即可.

來舉個例子:你沒有Nexus設備,只想編譯完后運行看看,那么就可以選擇aosp_arm-eng.

(我在ubuntu 16.04(64位)中編譯完成后啟動虛擬機時,卡在黑屏,嘗試編譯aosp_arm64-eng解決.因此,這里我使用了aosp_arm64-eng)

開始編譯

通過make指令進行代碼編譯,該指令通過-j參數來設置參與編譯的線程數量,以提高編譯速度.比如這里我們設置8個線程同時編譯:

make -j8

需要注意的是,參與編譯的線程并不是越多越好,通常是根據你機器cup的核心來確定:core*2,即當前cpu的核心的2倍.比如,我現在的筆記本是雙核四線程的,因此根據公式,最快速的編譯可以make -j8.

(通過cat /proc/cpuinfo查看相關cpu信息)

如果一切順利的化,在幾個小時之后,便可以編譯完成.看到### make completed successfully (01:18:45(hh:mm:ss)) ###表示你編譯成功了.

運行模擬器

在編譯完成之后,就可以通過以下命令運行Android虛擬機了,命令如下:

source build/envsetup.shlunch(選擇剛才你設置的目標版本,比如這里了我選擇的是2)emulator

如果你是在編譯完后立刻運行虛擬機,由于我們之前已經執(zhí)行過source及l(fā)unch命令了,因此現在你只需要執(zhí)行命令就可以運行虛擬機:

emulator

不出意外,在等待一會之后,你會看到運行界面:

這里寫圖片描述

補充

既然談到了模擬器運行,這里我們順便介紹模擬器運行所需要四個文件:

Linux Kernel

system.img

userdate.img

ramdisk.img

如果你在使用lunch命令時選擇的是aosp_arm-eng,那么在執(zhí)行不帶參數的emualtor命令時,Linux Kernel默認使用的是/source/prebuilds/qemu-kernel/arm/kernel-qemu目錄下的kernel-qemu文件;而android鏡像文件則是默認使用source/out/target/product/generic目錄下的system.img,userdata.img和ramdisk.img,也就是我們剛剛編譯出來的鏡像文件.

上面我在使用lunch命令時選擇的是aosp_arm64-eng,因此linux默認使用的/source/prebuilds/qemu-kernel/arm64/kernel-qemu下的kernel-qemu,而其他文件則是使用的source/out/target/product/generic64目錄下的system.img,userdata.img和ramdisk.img.

當然,emulator指令允許你通過參數制定使用不同的文件,具體用法可以通過emulator --help查看

模塊編譯

除了通過make命令編譯可以整個android源碼外,Google也為我們提供了相應的命令來支持單獨模塊的編譯.

編譯環(huán)境初始化(即執(zhí)行source build/envsetup.sh)之后,我們可以得到一些有用的指令,除了上邊用到的lunch,還有以下:

?- croot: Changes directory to the top of the tree. ?- m: Makes from the top of the tree. ?- mm: Builds all of the modules in the current directory. ?- mmm: Builds all of the modules in the supplied directories. ?- cgrep: Greps on all local C/C++ files. ?- jgrep: Greps on all local Java files. ?- resgrep: Greps on all local res/*.xml files. ?- godir: Go to the directory containing a file.

其中mmm指令就是用來編譯指定目錄.通常來說,每個目錄只包含一個模塊.比如這里我們要編譯Launcher2模塊,執(zhí)行指令:

mmm packages/apps/Launcher2/

稍等一會之后,如果提示:

### make completed success fully ###

即表示編譯完成,此時在out/target/product/gereric/system/app就可以看到編譯的Launcher2.apk文件了.

重新打包系統(tǒng)鏡像

編譯好指定模塊后,如果我們想要將該模塊對應的apk集成到系統(tǒng)鏡像中,需要借助make snod指令重新打包系統(tǒng)鏡像,這樣我們新生成的system.img中就包含了剛才編譯的Launcher2模塊了.重啟模擬器之后生效.

單獨安裝模塊

我們在不斷的修改某些模塊,總不能每次編譯完成后都要重新打包system.img,然后重啟手機吧?有沒有什么簡單的方法呢?

在編譯完后,借助adb install命令直接將生成的apk文件安裝到設備上即可,相比使用make snod,會節(jié)省很多事件.

補充

我們簡單的來介紹out/target/product/generic/system目錄下的常用目錄:

Android系統(tǒng)自帶的apk文件都在out/target/product/generic/system/apk目錄下;

一些可執(zhí)行文件(比如C編譯的執(zhí)行),放在out/target/product/generic/system/bin目錄下;

動態(tài)鏈接庫放在out/target/product/generic/system/lib目錄下;

硬件抽象層文件都放在out/targer/product/generic/system/lib/hw目錄下.

SDK編譯

如果你需要自己編譯SDK使用,很簡單,只需要執(zhí)行命令make sdk即可.

錯誤集合

在編譯過程中,遇到的大部分錯誤都可以在google搜到解決方案.這里只列舉幾個常見的錯誤:

錯誤一: You are attemping to build with the incorrect version.具體錯誤如下:

請點擊輸入圖片描述

這里寫圖片描述

如果你認真看了構建環(huán)境的的要求,那么這個錯誤是可以避免的.當然,這個問題也很容易解決:安裝openjdk 8,別忘了使用sudo update-alternative命令切換jdk版本.

錯誤二: Out of memory error.具體錯誤如下:

請點擊輸入圖片描述

這里寫圖片描述

這個錯誤比較常見,尤其是在編譯AOSP主線代碼時,常常會因為JVM heap size太小而導致該錯誤.

此時有兩種解決方法:

方法一:

在編譯命令之前,修改prebuilts/sdk/tools/jack-admin文件,找到文件中的這一行:

JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"

然后在該行添加-Xmx4096m,如:

JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

然后再執(zhí)行time make -8j

方法二:

在控制臺執(zhí)行以下命令:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"out/host/linux-x86/bin/jack-admin kill-serverout/host/linux-x86/bin/jack-admin start-server

如圖:

請點擊輸入圖片描述

這里寫圖片描述

執(zhí)行完該命令后,再使用make命令繼續(xù)編譯.某些情況下,當你執(zhí)行jack-admin kill-server時可能提示你命令不存在,此時去你去out/host/linux-x86/bin/目錄下會發(fā)現不存在jack-admin文件.如果我是你,我就會重新repo sync下,然后從頭來過.

錯誤三:使用emulator時,虛擬機停在黑屏界面,點擊無任何響應.此時,可能是kerner內核問題,解決方法如下:

執(zhí)行如下命令:

./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

通過使用kernel-qemu-armv7內核 解決模擬器等待黑屏問題.而-partition-size 1024 則是解決警告: system partion siez adjusted to match image file (163 MB 66 MB)

如果你一開始編譯的版本是aosp_arm-eng,使用上述命令仍然不能解決等待黑屏問題時,不妨編譯aosp_arm64-eng試試.

結束吧

到現在為止,你已經了解了整個android編譯的流程.除此之外,我也簡單的說明android源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.

android怎么修改源碼

在Android界面的系統(tǒng)status bar上添加home,back,menu三個菜單,并完成對應的系統(tǒng)功能。并有higlight效果,修改status bar 高度和status bar上的文字尺寸。

這需要修改android sdk才能完成,我用的是eclair.下面就我的操作進行敘述。

1.首先完成界面顯示效果。

需要修改文件

./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java,仿照mBatteryIcon等icon的添加方式添加自定義的icon,圖片名稱指定就好了。另外還要記得修改./frameworks/base/core/res/res/values/arrays.xml,這里定義了icon的slot,并且決定了icon的擺放順序。

這樣,你需要的icon按鍵就可以顯示在系統(tǒng)的status bar上面了。

2.判斷touch event是否按動了某個icon

需要修改的文件

./frameworks/base/services/java/com/android/server/status/StatusBarView.java

首先在onTouchEvent函數中,獲取當前event的坐標,然后比較是否在某個按鍵范圍之內。由于系統(tǒng)對于statusBar的范圍已經有了定義,所以這里只需要比較橫坐標就可以了。

其次,也是這一步最關鍵的,怎么獲取具體某一個icon的左右邊界坐標呢?系統(tǒng)的status bar左邊顯示的圖標都是notification, 右邊顯示的是系統(tǒng)icon. 也就是說左邊icon屬于mNotificationIcons,右邊的icon屬于mStatusIcons. 在文件StatusBarView.java中出現的offset = getViewOffset(mStatusIcons),得到mStatusIcons的最左邊的icon的left橫坐標。用N = mStatusIcons.getChildCount()得到共有幾個系統(tǒng)icon,其中包含visibility為false的icons.用mStatusIcons.getChildAt(N-i)得到的是從右邊數第i個的icon view. 這個view的getLeft()+offset就是這第i個icon的左邊橫坐標,對應的getRight()+offset就是這第i個icon的右邊橫坐標。本例中home鍵是右邊第2個icon.

3.定義icon響應事件

這里使用的方法是在StatusBarView.java中向

./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java發(fā)送一個Broadcast,讓StatusBarPolicy來完成具體的事件操作。這里需要注意的是不僅要在./frameworks/base/core/java/android/content/Intent.java中定義intent,還要在StatusBarPolicy的構造函數中添加該intent的過濾動作,即filter.addAction(Intent.ACTION_BACKICON_CHANGED).例如,按動了back鍵,如果當前事件為action_up,就向系統(tǒng)發(fā)送一個keyEvent,keyCode為KeyEvent.KEYCODE_BACK. 這里借用的是./frameworks/base/cmds/input/src/com/android/commands/input/Input.java中的sendKeyEvent函數,直接拷貝過來,按照需要稍微修改一下形參就可以了,過程不要修改。

需要說明的是,當點擊statusBar可以拉出來一個notification列表,當這個列表顯示出來的時候,這三個back, menu, home鍵的響應速度會非常慢,所以這時不響應事件并隱藏這三個鍵。具體做法是在StatusBarView的onTouchEvent()中判斷mService.mExpanded或者 mService.mTracking為真時就不做響應。mService是StatusBarService對象。隱藏三個鍵也是用Broadcast來做的,但這個intent是由StatusBarServie發(fā)出來的,當mExpandedVisible = false時顯示,當mExpandedVisible = true時隱藏。

這里還同時完成了highlight換圖的動作,也是用Broadcast來做得,處理過程一樣,就是需要區(qū)分action_down和action_up就可以了。

4.調整status bar的高度

如果你需要顯示較大的屏幕尺寸,同時statusBar的高度要拉大,上面的icon的size也需要調大。為了協調一致,顯示時間的字體和notification顯示的日期的字體也需要調大。具體做法如下:

a.調節(jié)status bar icon的size: 只調節(jié)status_bar.xml的textSize標簽似乎不起作用,同時又修改了./base/services/java/com/android/server/status/StatusBarIcon.java的t.setTextSize(32);語句才成功。不知道修改status_bar.xml的com.android.server.status.AnimatedImageView標簽下的layout_height值是不是必須的,反正我是一起都給改了。

b.調節(jié)status bar height: ./base/core/res/res/values/dimens.xml 找得我好辛苦!不知道還需不需要修改./base/core/res/res/values/themes.xml中的Window attributes的windowTitleSize值,反正我也給改了。

c.調節(jié)notification顯示日期字體的大小,修改status_bar.xml的com.android.server.status.DateView的textSize值。

到這里,就完成了所有工作,看看效果吧。

關于怎么修改安卓系統(tǒng)源代碼和手機怎么修改源代碼的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。

掃描二維碼推送至手機訪問。

版權聲明:本文由飛速云SEO網絡優(yōu)化推廣發(fā)布,如需轉載請注明出處。

本文鏈接:http://www.landcheck.net/post/3238.html

分享給朋友:

“怎么修改安卓系統(tǒng)源代碼(手機怎么修改源代碼)” 的相關文章

小學生競選班干部ppt模板免費下載(小學生競選班干部ppt模板免費下載資源)

小學生競選班干部ppt模板免費下載(小學生競選班干部ppt模板免費下載資源)

今天給各位分享小學生競選班干部ppt模板免費下載的知識,其中也會對小學生競選班干部ppt模板免費下載資源進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!本文目錄一覽: 1、小學生競選班干部演講稿 2、競選班干部ppt 3、孩子競選班干部ppt怎么做 小學生競選班干部演...

ui設計怎么自我介紹(ui設計師的自我介紹范文)

ui設計怎么自我介紹(ui設計師的自我介紹范文)

今天給各位分享ui設計怎么自我介紹的知識,其中也會對ui設計師的自我介紹范文進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!本文目錄一覽: 1、面試ui設計師時怎么說我的優(yōu)缺點 2、簡歷里面的ui設計師自我評價怎么寫 3、UI設計師應該如何寫簡歷? 4、UI設計師求...

情感書單圖片(情感書單圖片空白)

情感書單圖片(情感書單圖片空白)

今天給各位分享情感書單圖片的知識,其中也會對情感書單圖片空白進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!本文目錄一覽: 1、表達強烈愛國情感的書籍有哪些? 2、書單怎么制作 3、女生看哪些書籍可以擺脫情感煩惱,治愈內心? 4、抖音里的全民任務中,情感書單又是那一...

做公眾號內容的網站(做微信公眾號的網站)

做公眾號內容的網站(做微信公眾號的網站)

今天給各位分享做公眾號內容的網站的知識,其中也會對做微信公眾號的網站進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!本文目錄一覽: 1、我目前負責微信公眾號文章撰寫,請問有哪些網站可以學習嗎? 2、有沒有什么網站或者公眾號可以寫文章、小故事賺錢? 3、微信公眾號原創(chuàng)文章...