3

我正在开发两个共享大部分理论代码的 Android 应用程序(基本版和专业版)。

我从专业版开始,给它一个包名,比如 com.example.proapp。

对于 Basic 版,我在 git 中创建了 Pro 版的一个分支,并创建了 Eclipse 工作区的副本。随着 Basic 分支处于活动状态,我在 Eclipse 中打开了 Basic 工作区,然后:

  • 改变app_namestrings.xml
  • 更改了包名AndroidManifest.xml。(android:title应用程序及其主 Activity 的属性都指向@string/app_name。)
  • 使用 Refactor,将 Java 包名称从 更改com.example.procom.example.basic.
  • 替换了应用程序图标。

现在,当我启动应用程序时,一切看起来都很好。新的标题和图标就在那里。

但是,当我在 Android 上进入“管理应用程序”时,Basic 应用程序会显示 Pro 应用程序的图标和标题字符串。(如果我同时安装两者,我会得到 Pro 应用程序的两个条目;只有在点击其中一个之后,我才能通过查看包名称来查看哪个条目。)

这里有什么问题?如何让我的 Basic 应用程序以正确的名称和正确的图标显示?

更新:我尝试从“基本”分支创建第二个 git 存储库并将代码导入新的 Eclipse 工作区。我从手机上卸载了我的应用程序的两种风格,并加入了新版本。行为仍然相同 - 启动器和操作栏显示正确的图标和应用程序标题,而管理应用程序显示“Pro”图标和标题。

这个“亡灵”图标和标题从何而来?我们现在可以排除 Eclipse 工作区,也可以排除工作副本中的构建碎片。

看起来 Android 保留了已安装应用程序数据的缓存,甚至在卸载之后,并从那里恢复应用程序数据。但这只是猜测……有人能解释一下吗?

另外,为什么 Android 认为这两个 apk 是同一个应用程序?除了包名之外,APK 中是否有任何内部标识符?

更新 2:今天我在管理应用程序中获得了基本版本(未安装 Pro 版本)的正确名称和图标,尽管自上次查看以来我没有更改任何内容。唯一的问题是管理应用程序活动可能在此期间被杀死并重新启动。似乎我在管理应用程序中触发了一个错误......但是是什么触发了它?

4

2 回答 2

1

我认为您需要android:label在您<application>的应用程序上使用不同的名称。还要确保清理项目以显示资源更改。

于 2013-08-30T23:47:53.487 回答
0

我想我明白了。

阅读Android 项目重命名后 - 现在不会启动,我做了以下操作:

  • 从设备中删除了所有以前的版本
  • 从 Pro 版本创建了一个新分支
  • 将代码导入新的 Eclipse 工作区
  • 使用 Android 工具重命名包 > 从菜单中重命名应用程序包
  • src在using Refactor下更改了 Java 包名称
  • 根据需要为基本版本调整字符串和图标
  • 清洁项目
  • 推出基本版
  • 关闭 Eclipse 并切换回 Pro 分支
  • 使用 Pro 工作区启动 Eclipse
  • 清洁项目
  • 推出专业版

瞧!在我的 Nexus S 和 VirtualBox 中,我在管理应用程序中获得了两个具有不同名称和不同图标的不同应用程序。

得到教训:

  • 始终使用 Eclipse 命令来重命名应用程序或包。更改清单文件中的字符串是不够的。显然,Eclipse 进行了一些更改,而不仅仅是更新清单,可能在工作区文件夹中。
  • 在不同分支的两个版本之间进行清理。否则你会(显然——我试过了)携带过去构建的碎片,导致资源在分支之间混合,最终构建出与你的预期完全不同的东西。
于 2013-09-02T19:42:39.003 回答