我有一个没有特定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.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)
#!/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;
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预安装,则可以正常工作
P.S:如果您不允许调用脚本,可以通过在/system/core/include/private/android_filesystem_config.h
中添加类似内容来添加权限:
{ 00755, AID_ROOT, AID_ROOT, 0, "system/preinstall/preinstall.sh"},
导致第二种方式(预安装和shell添加权限),在这个自定义AOSP中,不起作用,我将从我的应用程序添加特定的Android权限,从开始,通过预建; 但是如果有人知道第二个解决方案有什么问题,我很感激。
答案 0 :(得分:2)
您可以修改主框架清单:
frameworks\base\core\res\Manifest.xml
将权限protectionLevel:
更改为"normal"
,就像priv-app
一样(即使不使用框架密钥构建),您应该自动授予所有正常权限,只需承担请注意,您要为该特定权限创建安全桥。
答案 1 :(得分:2)
在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
我已经成功了
答案 2 :(得分:0)
要获得系统权限,您应将APK放在/system/priv-app
文件夹中
注意:在Kitkat之前,系统分区上的所有APK都可以使用这些权限。
将APK复制到/system/priv-app
的示例代码段:
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := apkname.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app
LOCAL_SRC_FILES := apkname.apk
include $(BUILD_PREBUILT)
了解更多信息:
某些系统应用程序比其他系统应用程序更多 “signatureOrSystem”权限不再适用于驻留在/ system分区中的所有应用程序。相反,有一个新的/ system / priv-app目录,只有那些APK在该目录中的应用程序才允许使用signatureOrSystem权限而不共享平台证书。这将减少系统捆绑应用程序可能利用的表面区域,以尝试访问受权限保护的操作。
ApplicationInfo.FLAG_SYSTEM标志继续表示文档中的内容:它表示应用程序APK已捆绑在/ system分区上。引入了一个新的隐藏标志FLAG_PRIVILEGED,它反映了访问这些权限的实际权利。
[来源:https://stackoverflow.com/a/20104400/421467]
<强>更新强>
演练:https://github.com/Drjacky/Install-Google-Play-Manually