我有一个应用程序没有特定的android权限(例如
android.permission.CHANGE_CONFIGURATION
).
-
我没有它的源代码。
-
我正在做一个AOSP。
我预先构建了这样的应用程序:
-
/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))
它工作得很好,而且我的应用程序是预先构建到操作系统的。
现在,我想添加特定的android权限(
android.permission.CHANGE_CONFIGURATION
我读
this
,
this
和许多其他文档,但我不知道应用程序的XML文件的内容;还是有可能?!
(这些链接是否有助于引导我正确了解XML文件的内容?
this
和
this
)
我尝试了另一种方法,但没有成功(通过shell脚本预安装应用程序并添加权限:
注:
首先,我应该说它以前在另一个自定义AOSP上工作过,但在这个上不工作!
-
加入APK
-
在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中启动时将此shell脚本作为服务调用。rc文件,如:
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;
注:
如果我手动从shell调用preinstall,就可以了。
附笔:
如果不允许调用脚本,可以通过在
/system/core/include/private/android_filesystem_config.h
:
{ 00755, AID_ROOT, AID_ROOT, 0, "system/preinstall/preinstall.sh"},
因为在这个自定义AOSP中,第二种方式(通过shell预安装和添加权限)不起作用,我将通过预构建将特定的android权限添加到我的应用程序中;
但是
如果有人知道第二种解决方案有什么问题,我很感激。