我有一个没有特定 android 权限的应用程序(例如 android.permission.CHANGE_CONFIGURATION
)。
我预先构建了这个应用程序,如:
/device/model/apps/HERE
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
)添加到 myapp。我阅读了 this 、 this 和许多其他文档,但我不知道应用程序的这个 XML 文件的内容;或者甚至有可能?!
(这些链接是否有助于指导我了解 XML 文件内容的正确方向? this 和 this )
我尝试了另一种方法,但没有用(预安装应用程序并通过 shell 脚本添加权限:
注意: 首先,我应该说它以前在另一个自定义 AOSP 上工作过,但在这个上不起作用!
/device/model/apps/HERE
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.apkinclude $(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.shinclude $(BUILD_PREBUILT)
#!/system/bin/sh
MARK=/data/local/symbol_thirdpart_apks_installedPKGS=/system/preinstall/
if [ ! -e $MARK ]; thenecho "booting the first time, so pre-install some APKs."
busybox find $PKGS -name "*\.apk" -exec sh /system/bin/pm install {} \;
touch $MARKecho "OK, installation complete."fi
busybox sh /system/bin/pm grant com.example.myapp android.permission.CHANGE_CONFIGURATION;
on bootstart preinstallByMe
service preinstallByMe /system/bin/sh /system/preinstall/preinstall.sh class main user root group root disabled oneshot
但似乎不是电话。
service installapk /system/preinstall/preinstall.shclass mainoneshot
on bootexec /system/preinstall/preinstall.sh
busybox /system/preinstall/preinstall.sh
pm grant com.example.myapp android.permission.CHANGE_CONFIGURATION;
注意: 如果我从 shell 手动调用 preinstall,它的工作。
P.S: 如果您不允许调用您的脚本,您可以通过在
/system/core/include/private/android_filesystem_config.h
中添加以下内容来为其添加权限:{ 00755, AID_ROOT, AID_ROOT, 0, "system/preinstall/preinstall.sh"},
导致第二种方式(通过 shell 预安装和添加权限),在这个自定义 AOSP 中不起作用,我将从一开始就通过预构建将特定的 android 权限添加到我的应用程序中; 但是 如果有人知道第二个解决方案有什么问题,我很感激。
最佳答案
在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
我已经成功了
关于bash - 如何向 AOSP 中的预构建应用程序(无源代码)添加额外权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40397443/