如何在同一设备上安装我的应用程序的另一个版本? [no gradle]

时间:2018-07-19 04:35:18

标签: android build apk android-manifest

我正在从github上构建一个应用程序,并且我需要在同一设备上安装两个不同版本的应用程序。 要成为其他应用,一个应用必须至少有多少不同? 我想要一个小的更改,而不是在任何地方重命名软件包。

注意:没有任何问题。我是在设备本身上(使用termux)来做的,这没有问题。 该应用程序本身具有一些本机代码和一些不同的程序包。

看来, AndroidManifest.xml 中的 package 名称必须不同,当然, AndroidManifest.xml 中明确引用的所有类也必须存在。

但是足够了吗?具体来说,以下内容是否可以相同:

  • AndroidManifest.xml 中的所有其他内容?

  • 主包中的所有其他类?

  • 应用程序中的其他软件包吗?
  • 本地图书馆?

我猜清单中的所有其他名称都只是装饰,不能识别应用程序。因此,例如不同的应用在主屏幕上可能具有相同的名称。

软件包名称用于命名应用安装目录,因此其所有其他数据(例如dex类,本机库等)都是不同的。

对于Android来说,使用不同的类加载器加载每个应用程序是明智的,因此不同的应用程序可以具有相同的程序包。这样可以避免在使用相同(流行)库(使用静态/类字段)的不同应用的常见情况下发生冲突。

我的猜测是从以下答案得出的: https://android.stackexchange.com/a/20793/108921

如果是这样,我可以制作一个新程序包,将引用的类移动到其中,并在 AndroidManifest.xml 中使用此新程序包名称。 (这些类访问以前属于同一软件包的其他类可能会出现问题,但我想那是一个不同的问题。)

2 个答案:

答案 0 :(得分:0)

难以置信...包名称就像ID,我想... Google Play商店也使用包名称作为ID ...每个应用在每个设备上都具有唯一的ID,最后我可以说它不可能可以在1台设备上安装2个具有相同软件包名称的应用程序

答案 1 :(得分:0)

您只需要更改AndroidManifest.xml中的package属性( manifest包)。这可能与代码库的Java包不同。

有一些警告。 aapt工具使用清单包来生成R.java。使用清单包将AndroidManifest.xml中的任何(活动等的)相对名称都完整化为绝对名称。为避免这种情况,只需使用绝对名称即可。

为方便起见,--rename-manifest-package工具的aapt选项可以做到这一点。即填写所有相对名称,然后将清单包更改为给定的参数。

我已经用一个简单的项目对其进行了测试,并确认它可以在同一设备上安装同一应用程序的不同版本。

  

我还没有测试更复杂的项目...可能还有其他警告,包括构成公共API的AndroidManifest.xml的各个方面,以及 explicit <引用的活动,服务,ContentProviders和BroadcastReceivers / strong>意图。 Things That Cannot Change 20 June 2011

文档确认您可以更改原始Java包;并且您可以为同一应用创建不同的版本(风味)。不幸的是,它是在gradle如何读取和更新AndroidManifest.xml的另一层上讨论的,而不是直接自己做: Set the application ID