簡體   English   中英

將本地服務添加到aosp

[英]Add native service to aosp

我試圖將用C ++編寫的本機服務添加到AOSP構建中。
我要做的第一件事是為AOSP構建創建本機服務和客戶端。
這按預期工作。 我可以在adb shell中啟動該服務,然后通過adb shell上的活頁夾調用它。

當我想使用init啟動服務時,麻煩就開始了。
我在構建中添加了.rc文件

service myp /system/bin/myp_service
    class main

這樣做成功了,所以init嘗試啟動它,但是由於SELinux策略而失敗。

因此,我在設備樹中添加了一個file_contexts並添加了:

/system/bin/myp_service     u:object_r:myp_exec:s0

接下來,我添加了myp.te文件並添加了:

type myp, domain;
type myp_exec, exec_type, file_type;
type myp_service, service_manager_type;

init_daemon_domain(myp)
net_domain(myp)

binder_use(myp)
binder_service(myp)
add_service(myp, myp_service)
binder_call(myp, binderservicedomain)
binder_call(myp, appdomain)

allow myp myp_service:service_manager add;

最后,我添加了一個service_contexts文件:

myp     u:object_r:myp_service:s0

這最終使我的服務在啟動時成功啟動。 不幸的是,我不能對本服務使用活頁夾。 當我嘗試與客戶連接到服務時,電話

defaultServiceManager()->getService(String16("Demo"))

返回一個空指針。

我在dmesg找不到任何提示。 所以我認為我仍然缺少SElinux的東西,但是我不知道我缺少什么。
如果我使用setenforce關閉SELinux並重新啟動服務,則它可以正常工作。
誰能給我一個提示,我對於SELinux缺少什么,或者在哪里可以獲得有關哪些策略阻止了某些內容的更多信息?

您會看到這樣的拒絕:

  1. adb logcat | grep "SELinux : avc" > /tmp/logs
  2. 獲取sepolicy當前文件。 (可以通過這種方式從設備中獲取adb pull sepolicy
  3. 使用audit2allow (位於AOSP源代碼: external / selinux / prebuilts / bin / audit2allow或SDK工具中。執行以下操作: cat /tmp/logs | .external/selinux/prebuilts/bin/audit2allow -p sepolicy

audit2allow工具將告訴您所提取的logcat和當前sepolicy文件缺少哪些權限,請當心 ,因為您可能需要執行幾次此操作,因為修復某些權限將顯示下一個所需的權限。

如果您使用的是userdebug類型的構建,則可以獲取setenforce 0 ,logcat以及所有拒絕,即使您被允許執行所需的操作,也都將包含在logcat中。 這將保留1中所需的audit2allow迭代。

對於遇到此問題的任何人,請確保您的service_contexts文件已成功與service_contexts文件合並。 如果您要為Android O或更高版本構建服務,請將該文件放在文件夾中,並通過BOARD_PLAT_PRIVATE_SEPOLICY_DIR 1在Makefile中進行BOARD_PLAT_PRIVATE_SEPOLICY_DIR 如果構建系統確實選擇了service_contexts則無需添加allow myp default_android_service:service_manager add

另外,關於domain.te違規問題,您可能想將coredomainappdomain屬性之一附加到您的域2中typeattribute <your_domain> <attribute>;

最后,請仔細檢查以下構建文件,以確保在最終構建中不會遺漏任何Sepolicy配置:

  1. $(AOSP_ROOT)/out/target/product//obj/ETC/file_contexts.bin_intermediates/file_contexts.*
  2. $(AOSP_ROOT)/out/target/product/potter/obj/ETC/plat_service_contexts_intermediates/service_contexts.*
  3. $(AOSP_ROOT)/out/target/product/potter/obj/ETC/sepolicy_neverallows_intermediates/policy.conf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM