关于Android App的软件包名称和RAW资源

时间:2014-08-25 17:34:48

标签: android video resources

我遇到过需要创建已经编写和编译的应用程序的备用版本的情况。我更改了包名;这就是我所说的,我指的是" com.examplename.appname"。

所以原来的名字是这样的: com.examplename.appname 在新的应用程序中,我将其更改为: com.examplename.appnamenew

到目前为止一切顺利。该应用程序编译并运行正常。但是应用程序在该资源名称中引用了一个视频:(我不记得语法) uri = com.examplename.appname& " /Raw/video.mp4"

我没有更改该资源名称,因为我认为资源是否相同并不重要,因为它会将RAW剪辑编译到程序中。

事实证明,这很重要。如果同时在同一设备上安装了OLD版本和新版本,则新版本运行正常(资源存在)。但是,如果卸载旧版本,则新版本无法找到该视频。这是因为缺少编译程序中引用的资源。

我将新版本更改为指向正确的本地资源,当然这解决了问题。

但为什么会发生这种情况呢?为什么视频片段没有编译成APK?或者它,但仍然要求资源指针是正确的? 更重要的是,这是一种错误吗?

1 个答案:

答案 0 :(得分:0)

  

为什么视频剪辑不能编入APK?

它确实由你自己承认(“我改变了新版本以指向正确的本地资源,当然这解决了问题”)。

  

或者是这样,但仍然要求资源指针正确吗?

如果您有一个位于http://www.durbnpoisn.com的网站,并且您将该网站移至http://www.durbnpoisn.org,则对原始域名的所有引用仍然有效...直到您取下原始网站域名。那些引用就破了。仅仅因为您更改了您网站上的域名,并不会以某种方式神奇地更改来自互联网其余部分的所有入站URL。

在您的情况下,您似乎一直在使用android.resource:// Uri计划。这规定了一揽子计划。这相当于上面URL中的域名。您更改了包名称。但是,只要旧包仍然存在,对旧包名称的引用将继续有效。删除旧包后,对它的引用就会消失。仅仅因为您更改包名称并不会以任何方式从具有此类引用的任何位置神奇地更改对旧包名称的所有入站引用。

对于您对软件包名称进行硬编码的任何地方都是如此。因此,不要对软件包名称进行硬编码,而是使用其他方法(最坏的情况:在方便的getPackageName()上调用Context,例如Activity)。