如何修改手机上运行的系统应用程序

时间:2015-01-22 10:12:36

标签: android android-emulator

我想修改在特定手机上运行的系统应用。我对如何做到这一点的一些重要步骤感到难过 - 请在下面进一步查看我的问题。

N.B。:我对将这些修改部署到其他手机不感兴趣。相反,我想玩原始代码并改进它。因此"创建自己的系统应用程序"没有足够的答案。

背景

我刚刚开始进入Android开发(尽管有足够的Java知识)。有很多很棒的教程(例如herehere),但它们似乎都涵盖了用户应用程序开发。我更感兴趣的是(更接近)"更接近金属"。不幸的是,我无法找到教导如何做到这一点的好消息来源。

实施例

作为一个例子,让我们说我想修改内置亮度控制的工作方式(例如更改最小值)或者想要在呼叫屏幕上添加功能(例如"发送短信&#34 ;当线路繁忙时。)

具体问题

我显然需要这些东西才能开始......

来源

我手机上运行的操作系统的(部分?)的来源。这是让我最困惑的部分。我可以download the official sources或者我的供应商是否可能进行了修改?

在我的特定场景中(我使用Fairphone),这些修改是否可以包含在以下任何来源中:

工具

我真的希望留在Java-land。但无论哪种情况,我都需要开发(我希望使用Android StudioEclipse ADT)和调试环境(我希望Android Virtual Devices足够)。

我是否可以将这些工具用于系统应用程序,或者它们通常是用C实现的吗?

过程

假设我可以下载官方资源并开始使用,例如Android Studio。与开发用户应用程序相反,我是否必须做一些特殊的事情来模拟AVD上修改过的系统应用程序?

我问,因为我认为AVD已经运行了该应用程序的未修改版本。

1 个答案:

答案 0 :(得分:1)

  

我刚刚开始进入Android开发(尽管有足够的Java知识)。 ...我更感兴趣的是(更接近)"更接近金属"。

你当然可以追随自己的幸福,但你可能会发现通过黑客入侵操作系统来学习Android开发非常令人沮丧。您会发现自己正在进行大量的操作系统调试,并使用比平时更难使用的工具。

  

实施例

     

作为一个例子,让我们说我想修改内置亮度控制的工作方式(例如改变最小值)

我意识到这只是一个例子,但这可能是一个艰难的例子,因为有许多事情有助于亮度控制 - 有设置它的用户界面的应用程序,但会谈与环境光传感器协调,实际处理显示器亮度曲线的硬件框架和最终驱动程序。

  

或想要在通话屏幕上添加功能(例如"发送短信"线路忙时)。

有一个拨号器应用程序,但实现这样的功能将是......很难,只要它甚至可行。我不知道API是否可以使用这种呼叫状态。

  

具体问题

     

我显然需要这些东西才能开始......

     

来源

     

我手机上运行的操作系统的(部分?)的来源。这是让我最困惑的部分。我可以下载官方消息来源,还是我的供应商可能会进行修改?

如果您要更换系统应用程序,则需要运行使用调试密钥签名的操作系统;您无法在操作系统的零售版本上访问已安装系统应用程序的签名密钥,以便您可以替换它们。这意味着要么进行调试密钥安装,要么自己从源代码构建它,然后将其闪存到手机上。我强烈建议您不要使用日常电话进行此类工作 - 当您需要接听重要电话时,您不希望它被打砖块。

如果您没有运行Nexus手机,那么您的供应商已经进行了修改。系统应用程序可能已经过修改,您几乎肯定无法访问这些应用程序的封闭源代码。此外,还有一些闭源设备驱动程序对于您无法访问的操作系统的运行至关重要。如果你试图在这样的设备上启动和运行AOSP Android,作为一个单独的黑客,它充其量是非常非常困难的。如果您愿意使用像CyanogenMod这样的东西,您可以查看它们是否(以及在多大程度上)支持您的硬件。

如果您正在运行Nexus手机,那么AOSP项目的目标是尝试让操作系统在选定的Nexus设备上启动,尽管您不一定享受零售操作系统的最全面功能构建,取决于驱动程序的状态 - 即使是Nexus手机也可以拥有闭源驱动程序和位,使生命更多,嗯,令人兴奋的建立AOSP。

  

在我的特定情况下(我使用Fairphone),这些修改是否可以包含在以下任何来源中:

     

供应商部署的一些核心应用程序

几乎可以肯定

  

图像二进制文件(在某种程度上向下)

不确定你的意思

  

Linux内核和其他一些库的来源

不太可能对内核本身进行重大修改,尽管供应商有时做......有趣的......系统配置。我已经提到了设备驱动程序供应商还有一些框架API的自定义实现/修改。

  

工具

特定于供应商的工具很少见。

  

我真的希望留在Java-land。但无论哪种情况,我都需要开发(我希望使用Android Studio或Eclipse ADT)和调试环境(我希望Android Virtual Devices足够)。

您想要做的大部分内容都可以用Java实现,但这取决于您到硬件的接近程度,这很难理解。

  

我是否可以将这些工具用于系统应用程序,或者它们通常是用C实现的吗?

"系统应用"用Java实现,但同样,你必须知道分界线的位置。

  

过程

     

假设我可以下载官方资源并开始使用,例如Android Studio。与开发用户应用程序相反,我是否必须做一些特殊的事情来模拟AVD上修改过的系统应用程序?

这实际上是不同的,因为您正在处理模拟器系统映像而不是电话映像。仿真器系统映像是完全开源的,您可以从AOSP构建它们。

  

我问,因为我认为AVD已经运行了该应用程序的未修改版本。

那是对的。

回到我最初的观点,如果你在我所说的内容之间进行阅读,我就不会告诉你它是不可能的,但困难的范围从freakin'在艰难的一端努力度过多年的艰辛。如果您真的想继续,最好的选择可能是购买CyanogenMod支持的最好的手机,并按照这个角度进行操作;那里有一个更活跃的开发者社区来帮助你。我知道你尝试自定义操作系统比制作用户空间应用程序更令人兴奋,但是后者对后者的挫败感要比前者少。