如何在 AOSP 中向预构建应用程序(无源代码)添加额外权限

2024-04-26

我有一个没有特定 android 权限的应用程序(例如android.permission.CHANGE_CONFIGURATION).

  1. 我没有它的源代码。
  2. 我正在开发 AOSP。

我预先构建了这个应用程序,如下所示:

  1. 将APK放入/device/model/apps/HERE
  2. 在 Android.mk 中添加以下代码片段:

define PREBUILT_templateByMe LOCAL_MODULE := $(1) LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED LOCAL_SRC_FILES := $$(LOCAL_MODULE).apk LOCAL_REQUIRED_MODULES := $(2) include $(BUILD_PREBUILT) endef

define PREBUILT_APP_templateByMe include $$(CLEAR_VARS) LOCAL_MODULE_TAGS := optional $(call PREBUILT_templateByMe, $(1), $(2)) endef

prebuilt_appsByMe := \ myapp

$(foreach app,$(prebuilt_appsByMe), \ $(eval $(call PREBUILT_APP_templateByMe, $(app),))) include $(call all-makefiles-under,$(LOCAL_PATH))

它工作得很好,并且 myapp 已预先构建到操作系统中。

现在我想添加特定的 android 权限(android.permission.CHANGE_CONFIGURATION)到我的应用程序。

I read this https://stackoverflow.com/questions/27889193/adding-own-framework-or-library-to-aosp, this http://karthiksden.blogspot.de/2011/03/copying-data-files-using-androidmk.html和许多其他文档,但我不知道该应用程序的 XML 文件的内容;或者说有可能吗?
(这些链接是否有助于引导我了解 XML 文件内容的正确方向?this https://github.com/InsomniaAOSP/platform_external_sepolicy/blob/master/tools/setool/tests/res/com/seandroid/tools/1.xml and this https://android.googlesource.com/platform/external/sepolicy/+/b19665c39da76c0e24c8cd9583e30c4a50567510%5E!/)


我尝试了另一种方法,但没有成功(预安装应用程序并通过 shell 脚本添加权限:
Note:首先,我应该说它之前在另一个自定义 AOSP 上有效,但在这个上不起作用!

  1. 将APK放入/device/model/apps/HERE
  2. 在 Android.mk 中添加此片段代码

include $(CLEAR_VARS) LOCAL_MODULE := myapp.apk LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall LOCAL_SRC_FILES := myapp.apk include $(BUILD_PREBUILT)

include $(CLEAR_VARS) LOCAL_MODULE := preinstall.sh LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall LOCAL_SRC_FILES := preinstall.sh include $(BUILD_PREBUILT)

  1. preinstall.sh的内容:

#!/system/bin/sh
MARK=/data/local/symbol_thirdpart_apks_installed PKGS=/system/preinstall/
if [ ! -e $MARK ]; then echo "booting the first time, so pre-install some APKs."
busybox find $PKGS -name "*\.apk" -exec sh /system/bin/pm install {} \;
touch $MARK echo "OK, installation complete." fi
busybox sh /system/bin/pm grant com.example.myapp android.permission.CHANGE_CONFIGURATION;

  1. 在 init.rc 文件中将此 shell 脚本作为启动时的服务调用,例如:
    on boot start preinstallByMe

service preinstallByMe /system/bin/sh /system/preinstall/preinstall.sh class main user root group root disabled oneshot

但似乎没有打电话。

  1. 即使 init.rc 文件中的这些片段代码也不起作用:

    1. service installapk /system/preinstall/preinstall.sh class main oneshot

    2. on boot exec /system/preinstall/preinstall.sh

    3. busybox /system/preinstall/preinstall.sh
    4. pm grant com.example.myapp android.permission.CHANGE_CONFIGURATION;

Note:如果我从 shell 手动调用预安装,它就可以工作。
P.S:如果您不允许调用您的脚本,您可以通过添加类似的内容来添加权限/system/core/include/private/android_filesystem_config.h :

{ 00755, AID_ROOT, AID_ROOT, 0, "system/preinstall/preinstall.sh"},

因为第二种方式(通过 shell 预安装并添加权限)在这个自定义 AOSP 中不起作用,我将从头开始通过预构建将特定的 Android 权限添加到我的应用程序中;But如果有人知道第二个解决方案有什么问题,我很感激。


在 shell 脚本文件中,您必须使用:

pm grant com.example.myapp android.permission.CHANGE_CONFIGURATION

并将shell脚本复制到/system/bin/

在 init.rc 中,启动完成后执行 shell:

on property:sys.boot_completed=1
   exec /system/bin/preinstall.sh

我已经成功了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 AOSP 中向预构建应用程序(无源代码)添加额外权限 的相关文章

随机推荐