如何在AOSP中向预构建的应用程序添加额外的权限(无源代码) [英] How to add extra permission to a prebuilt application (no source code) in AOSP

查看:165
本文介绍了如何在AOSP中向预构建的应用程序添加额外的权限(无源代码)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have an application that doesn't have a specific android permission(for example android.permission.CHANGE_CONFIGURATION).


  1. 我没有源代码。

  2. 我正在研究AOSP。

我已预先构建了此应用程序,例如:

I prebuilt this application like:


  1. 将APK放入 / device / model / apps / HERE

  2. 在Android.mk中添加以下代码段:

定义PREBUILT_templateByMe
LOCAL_MODULE:= $(1)
LOCAL_MODULE_CLASS:= APPS
LOCAL_MODULE_SUFFIX:= $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CE :=预设
LOCAL_SRC_FILES:= $$(LOCAL_MODULE).apk
LOCAL_REQUIRED_MODULES:= $(2)
包括$(BUILD_PREBUILT)
endef

定义PREBUILT_APP_templateByMe
包括$$(CLEAR_VARS)
LOCAL_MODULE_TAGS:=可选
$(调用PREBUILT_templateByMe,$ (1),$(2))
endef

prebuilt_appsByMe:= \
myapp

$(foreach应用程序,$(prebuilt_appsByMe),\
$(eval $(调用PREBUILT_APP_templateByMe,$(app),)))
include $(call all-makefiles-under,$(LOCAL_PATH))

它工作得很好,并且myapp已预先构建到OS。

It's work very well, and myapp prebuilt to OS.

现在我想将特定的android权限( android.permission.CHANGE_CONFIGURATION )添加到myapp中。

Now I want to add that specific android permission(android.permission.CHANGE_CONFIGURATION) to myapp.

我阅读了以及许多其他文档,但我不知道该XML文件在应用程序中的内容;甚至有可能吗?!

(这些链接是否有助于将我定向到有关XML文件内容的正确方向?

I read this, this and many other documents, but I don't know the content of this XML file for an application; Or is it even possible?!
(Does these links helpful to direct me in the right direction about content of XML file? this and this)

我尝试了另一种方法,但是没有用(预安装应用程序并通过shell脚本添加权限:

注意:首先,我应该说它在

I tried another way, but didn't work(preinstall application and add permission by shell script:
Note: First of all, I should say it worked before, on another custom AOSP, but didn't work on this one!


  1. 将APK放入 / device / model / apps中/ HERE

  2. 在Android.mk中添加此代码段

包括$(CLEAR_VARS)
LOCAL_MODULE:= myapp.apk
LOCAL_MODULE_TAGS:=可选
LOCAL_MODULE_CLASS:= ETC
LOCAL_MODULE_PATH:= $(TARGET_OUT)/预安装
LOCAL_SRC_FILES:= myapp.apk
包括$(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE:= preinstall.sh
LOCAL_MODULE_TAGS:=可选
LOCAL_MODULE_CLASS:= ETC
LOCAL_MODULE_PATH:= $( TARGET_OUT)/预安装
LOCAL_SRC_FILES:= preinstall.sh
包括$(BUILD_PREBUILT)


  1. preinstall.sh的内容:

#!/ system / bin / sh

MARK = / data / local / symbol_thirdpart_apks_installed
PKGS = / system / preinstall /


如果[! -e $ MARK];然后
echo第一次启动,因此请预先安装一些APK。


busybox找到$ PKGS -name * \ .apk -exec sh / system / bin / pm install {} \;

touch $ MARK
echo确定,安装完成。
fi


busybox sh / system / bin / pm grant com.example.myapp android.permission.CHANGE_CONFIGURATION;


  1. 在启动时在init.rc文件中将此Shell脚本作为服务调用,例如:

    在启动
    上启动preinstallByMe

  1. Call this shell script as service on boot in init.rc file, like:
    on boot start preinstallByMe

service preinstallByMe / system / bin / sh /system/preinstall/preinstall.sh
类主
用户root
组root
禁用
oneshot

但似乎没有打电话。


  1. 即使init.rc文件中的这些代码段也无法正常工作:

  1. Even these snippet codes in init.rc file not working too:


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

在启动时
exec /system/preinstall/preinstall.sh


注意:如果我手动从shell调用预安装,就可以了。

PS:如果不允许调用脚本,则可以通过添加类似这样的命令来为其添加权限在 /system/core/include/private/android_filesystem_config.h 中:

Note: If I call preinstall from shell manually, it's work.
P.S: If your not allowed to call your script, you can add permission to it by adding something like this in /system/core/include/private/android_filesystem_config.h :

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

第二种原因(通过shell预安装并添加权限),在此自定义AOSP中不起作用,我将从一开始就通过预构建将特定的android权限添加到我的应用中; 但是如果有人知道第二种解决方案出了什么问题,我将不胜感激。

Cause second way(preinstall and add permission by shell), in this custom AOSP, doesn't work, I'm going to add that specific android permission to my app, from beginning, via prebuilt; But if anyone knows what's wrong with the second solution, I'm appreciate it.

推荐答案

To要获得系统权限,您应该将APK放在 / system / priv-app 文件夹中。

注意:到Kitkat,系统分区上的所有APK都可以使用这些权限。

To be eligible for system permissions, you should put your APKs in /system/priv-app folder.
Note: Prior to Kitkat, all APKs on the system partition could use those permissions.

示例片段代码将APK复制到 / system / priv-app

The sample snippet code to copy APK to /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权限,而无需共享平台证书。这样可以减少可能的系统捆绑应用程序利用面积,以尝试获取权限保护的操作。

Some system apps are more system than others "signatureOrSystem" permissions are no longer available to all apps residing en the /system partition. Instead, there is a new /system/priv-app directory, and only apps whose APKs are in that directory are allowed to use signatureOrSystem permissions without sharing the platform cert. This will reduce the surface area for possible exploits of system- bundled applications to try to gain access to permission-guarded operations.

ApplicationInfo.FLAG_SYSTEM标志继续表示它的含义。在文档中说:它表明应用程序APK捆绑在/ system分区上。引入了一个新的隐藏标志FLAG_PRIVILEGED,该标志反映了访问这些权限的实际权利。

The ApplicationInfo.FLAG_SYSTEM flag continues to mean what it is said in the documentation: it indicates that the application APK was bundled on the /system partition. A new hidden flag FLAG_PRIVILEGED has been introduced that reflects the actual right to access these permissions.

[来源: https:// stackoverflow.com/a/20104400/421467 ]

更新:

演练: https://github.com/Drjacky/Install-Google-Play-Manually

这篇关于如何在AOSP中向预构建的应用程序添加额外的权限(无源代码)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆