我有一个没有特定 android 权限的应用程序(例如android.permission.CHANGE_CONFIGURATION
).
- 我没有它的源代码。
- 我正在开发 AOSP。
我预先构建了这个应用程序,如下所示:
- 将APK放入
/device/model/apps/HERE
- 在 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 上有效,但在这个上不起作用!
- 将APK放入
/device/model/apps/HERE
- 在 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)
- 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;
- 在 init.rc 文件中将此 shell 脚本作为启动时的服务调用,例如:
on boot
start preinstallByMe
service preinstallByMe /system/bin/sh /system/preinstall/preinstall.sh
class main
user root
group root
disabled
oneshot
但似乎没有打电话。
-
即使 init.rc 文件中的这些片段代码也不起作用:
service installapk /system/preinstall/preinstall.sh
class main
oneshot
on boot
exec /system/preinstall/preinstall.sh
busybox /system/preinstall/preinstall.sh
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如果有人知道第二个解决方案有什么问题,我很感激。