欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

android.bp,Androidbp 預(yù)編譯jar包

Android.mk轉(zhuǎn)Android.bp

背景:

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)公司專業(yè)提供成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站制作(企業(yè)站、自適應(yīng)網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!

不少APP在P上是Android.mk,在10上變成Android.bp,我們在MK的時候需要對其進(jìn)行轉(zhuǎn)換。

轉(zhuǎn)換方法:

利用Android自帶的工具進(jìn)行轉(zhuǎn)換

使用自帶工具前提:

1.Source full build 過(最好)

2.在out/soong/host/linux-x86/bin/目錄下存在androidmk文件。

如果不存在androidmk文件,使用m -j blueprint_tools命令生成

具體轉(zhuǎn)換方法:

1.cd out/soong/host/linux-x86/bin/

2.執(zhí)行命令:androidmk android.mk文件 android.bp文件

例子:

1.cd out/soong/host/linux-x86/bin/

2.androidmk ./mk2bp/Android.mk ./mk2bp/Android.bp

例子中step2說明:

由于out/soong/host/linux-x86/bin/路徑下文件太多,不好識別轉(zhuǎn)換后的文件,所以自己建了個mk2bp文件夾,放要轉(zhuǎn)換的Android.mk。方便查看而已

至于放Android.mk放哪,隨便。

如果遇到內(nèi)容復(fù)雜一點(diǎn)的Android.mk,可能工具轉(zhuǎn)換會出錯。待進(jìn)一步研究。

android 中Bn 和Bp的區(qū)別

Bn意味著Binder Native 端 Bp是Binder Proxy端, 這兩端會實(shí)現(xiàn)相同的接口,但Proxy端只是通過binder ipc發(fā)送一個binder transaction, native端是真正做事情,再將結(jié)果返回。 Android用此機(jī)制實(shí)現(xiàn)高效的遠(yuǎn)程調(diào)用??梢钥纯窗沧堪褪康慕坛蹋?/p>

AndroidFramework 之啟動 ServiceManager

本文源碼基于 Android 10 ,涉及相關(guān)源碼如下。

ServiceManagaer 是 Binder 的守護(hù)進(jìn)程,在 Binder 機(jī)制中起著重要的作用。本文將從源碼的角度對其進(jìn)行分析,整體流程如下:

時序圖如下。

先來看看 ServiceManager 是如何啟動的:

在 Zygote 一文中說過, init 進(jìn)程啟動的第二階段會解析 init.rc 文件。

在這之后會觸發(fā) trigger init 。

結(jié)合 init.rc 看看 action init 做了什么。

當(dāng)觸發(fā) trigger init 后,會啟動 servicemanager 服務(wù),其聲明如下。

對應(yīng)的執(zhí)行文件為 /system/bin/servicemanager ,在編譯前位于 frameworks/native/cmds/servicemanager 下,來看看 Android.bp 。

其對應(yīng)的源碼為 service_manager.c 和 binder.c ,入口函數(shù) main() 位于 servicemanager.c 。

啟動完 ServiceManager 后會打開 Binder 驅(qū)動。

在 main() 中首先調(diào)用 binder_open() 。

binder_open() 主要做了如下事情:

給結(jié)構(gòu)體 binder_state 分配內(nèi)存。

系統(tǒng)調(diào)用 open() 打開 /dev/binder ,如果打開驅(qū)動失敗,則執(zhí)行 fail_open 釋放內(nèi)存。

簡單的解釋一下什么是系統(tǒng)調(diào)用?

由于需要限制不同的程序之間的訪問能力,防止程序獲取別的程序的內(nèi)存數(shù)據(jù), CPU 劃分出兩個權(quán)限等級, 用戶態(tài) 和 內(nèi)核態(tài) 。

所有的用戶程序都是運(yùn)行在用戶態(tài),但有時需要做一些內(nèi)核態(tài)的事情,而唯一可以做這些事情的就是操作系統(tǒng),所以程序需要向操作系統(tǒng)發(fā)起請求,以程序的名字來執(zhí)行這些操作。這時就需要一個從用戶態(tài)切換到內(nèi)核態(tài)但不能控制內(nèi)核態(tài)中執(zhí)行的機(jī)制,這種機(jī)制就是 系統(tǒng)調(diào)用 。

系統(tǒng)調(diào)用 ioctl() 傳入 BINDER_VERSION 命令獲取 Binder 驅(qū)動版本,對比版本是否一致,不一致則執(zhí)行 fail_open 釋放內(nèi)存。

系統(tǒng)調(diào)用 mmap() 映射 128kb 的內(nèi)存空間,即把 Binder 驅(qū)動文件的 128kb 映射到內(nèi)存空間供 ServiceManager 使用,內(nèi)存映射失敗則執(zhí)行 fail_map ,關(guān)閉 fd 并釋放內(nèi)存。

ServiceManager 進(jìn)程 mmap 的內(nèi)存大小可以通過 adb shell 命令查看。

可以看到內(nèi)存映射地址為 0xf10f8000 ~ 0xf1118000 ,差為 0x20000 即十進(jìn)制的 128kb 。

打開 Binder 驅(qū)動后會將 ServiceManager 設(shè)置為上下文管理者。

調(diào)用 binder_become_context_manager() 。

android 10 新增 BINDER_SET_CONTEXT_MGR_EXT 命令來設(shè)置安全的上下文管理者,如果設(shè)置失敗,則使用原有的 BINDER_SET_CONTEXT_MGR 命令來設(shè)置上下文管理者,兩者區(qū)別在于是否攜帶參數(shù)。

最后會進(jìn)入循環(huán),從 Binder 驅(qū)動讀取和解析數(shù)據(jù)。

調(diào)用 binder_loop() 進(jìn)入循環(huán),不斷地通過系統(tǒng)調(diào)用 ioctl() 從 Binder 驅(qū)動讀取數(shù)據(jù),并通過 binder_parse() 進(jìn)行數(shù)據(jù)解析。

注意這里調(diào)用 binder_loop() 傳入的 svcmgr_handler() ,后面會使用到。

binder_write() 會封裝 struct binder_write_read ,并通過系統(tǒng)調(diào)用 ioctl() 將對應(yīng)的命令傳遞給 Binder 驅(qū)動。

binder_parse() 用來解析從 Binder 驅(qū)動讀取到的數(shù)據(jù),然后根據(jù)不同的命令執(zhí)行對應(yīng)的操作。

因?yàn)? cmd 命令可能有多個,所以通過 while 循環(huán)每次處理一個 cmd 命令,多 cmd 的結(jié)構(gòu)大致如下圖所示。

這里重點(diǎn)看下 BR_TRANSACTION 命令。

BR_TRANSACTION 是 Binder 驅(qū)動向 Server 端發(fā)送請求數(shù)據(jù)。

binder_transaction_data 的結(jié)構(gòu)如下,其表明了 transcation 傳輸?shù)木唧w語義,語義碼記錄在 code 中,不同語義碼攜帶的數(shù)據(jù)是不同的,這些數(shù)據(jù)由 data 指定。

在解析完 binder_transaction_data 的具體語義后,會調(diào)用前面?zhèn)鹘o binder_loop() 的 svcmgr_handler() ,其實(shí)就是 switch case 語義碼做不同的事情。

ServiceManager 的功能其實(shí)很簡單:

至此 ServiceManager 就分析完了。

get compile_commands.json from aosp

soong delete the direct way to get compile_commands, which is suck to use, but instead ,provide a way to get clion project file, you can find it in soong document. but some generated CMakeList.txt is hard use like drm module, there are many CMakeList.txt generated in drm module, but I just want a compile_commands, not so many split .

so I write a script to solve it

perfect version

由于android.mk無法生成對應(yīng)的clion工程,所以需要將android.mk轉(zhuǎn)化為android.bp,androidmk適應(yīng)于簡單情況,當(dāng)android.mk復(fù)雜時需要手動轉(zhuǎn)化。drm就是一個例子,他的mk文件使用了proto,參照其他bp文件處理proto的方法,做如下修正

aosp/frameworks/av/drm/mediacas/plugins/clearkey

第二章:Android.bp語法

注意 :關(guān)于Android.bp的權(quán)威解釋可以參見 android.bp權(quán)威文檔

Google官方語法文檔

從前面的列子可以看出定義一個模塊從模塊的類型開始,模塊有不同的類型,如前面例子中的cc_library_shared,當(dāng)然類型還有很多種,譬如 cc_binary、android_app 、cc_library_static 等等。模塊包含一些屬性格式為“property-name:property-value”,其中name屬性必須指定,其屬性值必須是全局唯一的。

其中默認(rèn)模塊可用于在多個模塊中重復(fù)相同的屬性

srcs 屬性以字符串列表的形式指定用于編譯模塊的源文件。您可以使用模塊引用語法 “:” 來引用生成源文件的其他模塊的輸出,如 genrule 或 filegroup。

實(shí)例說明:

我們知道Android.mk中可以定義變量,當(dāng)然作為新編譯系統(tǒng)中替代Android.mk的Android.bp也是一定存在,更加何況Android.mk還可以一定條件的轉(zhuǎn)換成Android.bp。

變量范圍限定為聲明它們的文件的其余部分,可以使用 “=” 號賦值, 但是不能使用 “:=” 賦值。變量是不可變的,但有一個例外它們可以附上+= 賦值,但僅在變量被引用之前。

下面我們看一下正確使用變量的列子:

我們知道Android.mk中可以進(jìn)行注釋,當(dāng)然Android.bp里面也可以,Android.mk中使用 # 然后添加注釋,Android.bp使用單行注釋 // 和多行注釋 /* */ 兩種方式。

具體支持以下幾種類型:

String類型、字符串列表類型和Map類型支持操作符 + 。

Android.bp可以支持android_app、cc_binary、cc_binary_host等多種類型,具體定義在Android源碼的 build/soong/androidmk/cmd/androidmk/android.go 可以查看,具體如下:

Android.bp可以支持多種預(yù)編譯類型,具體定義在Android源碼的 build/soong/androidmk/cmd/androidmk/android.go 可以查看,如下圖所示:

例如: system/core/libusbhost/Android.bp aosp9.0開始

Android.bp是一門實(shí)戰(zhàn)性的東西,光說不練沒有啥用,說再多不如直接開練來得舒服。那就直接開始手撕實(shí)例了,讓我們開戰(zhàn)嗎!

下面幾種庫編譯類型:

2.1 動態(tài)庫類型

最終編譯為so包

**2.2 java庫類型: **

最終編譯為jar包

2.3 Andorid應(yīng)用類型

最終編譯為apk包

轉(zhuǎn)自:

網(wǎng)頁名稱:android.bp,Androidbp 預(yù)編譯jar包
本文鏈接:http://aaarwkj.com/article12/dsspjgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、企業(yè)網(wǎng)站制作網(wǎng)站內(nèi)鏈、域名注冊、標(biāo)簽優(yōu)化網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
一区二区三区毛片观看| 国产原创传媒在线观看| 国产二区三区在线播放| 日本在线免费观看91 | 在线视频一区二区三区精品观看| 国产精品免费视频一区二区三区| 色哟哟视频免费在线观看| 日韩 欧美 国产 亚洲 综合| av熟女乱一区二区三区| 激情一区二区三区视频| 日韩成人中文字幕电影| 国产欧美日韩综合一区| 蜜桃视频在线观看91| 亚洲欧美日韩乱码综合久久| 91在线看片国产免费观看| 午夜福利亚洲免费久久| 国产三级三级在线观看| 日本不卡不码高清免费| 久久亚洲中文字幕丝袜长腿 | 高清日韩精品视频在线观看| 中文字幕一区二区精品区| 日韩欧美亚洲国产另类| 国产高清亚洲一区亚洲二区| 精品人妻av区天天看片| 青青草最新网址在线观看视频 | 国产女主播在线观看免费观看| 五月婷婷色综合激情五月| 国产一级黄色免费大片| 国产真人作爱视频免费| 国产一区二区视频在线| 亚洲精品av一区二区久久| 国产熟女真实乱精品视频| av免费在线观看大全| 精品人妻日韩中文字幕| 日韩欧美黄片一区二区三区| 色哟哟在线观看精品一区| 国产97精品在线播放| 国产精品免费观看在线国产 | 国产欧美色日韩综合在线| 国产在线视频不卡一区| 人妻少妇中文字幕一区|