我知道这听起来很“hacky”但我想个性化我已安装在Android中的应用程序的一些UI。例如。使用相同的字体,颜色等我知道这听起来很奇怪,但我不打算为别人创建一个应用程序而不是我,所以如果我必须根我的手机或让它在调试模式下,这不是问题。任何线索?
PS:我已经看到了一些建议解压缩/压缩apk的答案,但我不想修改应用程序的源代码,只是在运行时注入一些样式(如针对Web应用程序的Stylish扩展)。 PS2:由于Cordova应用程序是使用Web技术构建的,因此可以使用DOM进行操作,但如何从外部进行操作?提前致谢!
答案 0 :(得分:2)
免责声明:由于问题非常笼统,所以答案也是如此。
让我们考虑一下CyanogenMod(现已退役......)主题引擎的例子。以下是article that described how it worked的一些摘录(此处强调):
在最基本的层面上,主题只是一种允许在运行时替换资源的机制 ...只需将它们视为构成应用程序UI的元素。每当应用程序启动时,Android都会加载与该应用程序关联的资源,并且应用程序会请求这些资源。
这是检索资源的正常流程,但是在应用主题时会发生什么?当系统加载应用程序的资源时,它会检查是否应用了主题,如果有,则将主题资源添加到原始资源。这就是魔术发生的地方。 当应用请求资源时,系统会检查是否有主题版本,如果有,会返回主题资源,如果不是,则只返回原始资源。这里的关键点是原始资源永远不会被修改/移动/改变,系统只是从主题而不是原始资源返回资源。如下图所示,就应用程序而言,没有区别。
这是通过利用称为运行时资源叠加的框架来完成的,该框架已提供给AOSP by Sony in 2014。 RRO框架的一部分是一个名为IDMAP的工具。 IDMAP检查应用程序中的资源,并将资源类型和名称与主题资源中的资源类型和名称进行比较。对于那些匹配它的资源,存储原始资源到主题中匹配资源的映射。完成此过程后,我们将使用有效方式来确定资源是否为主题以及该资源所在的位置。
......还有更多。
我认为这些应该让你走上正确的道路。