安卓:什么是规范包名?

3
Android的PackageManager类有currentToCanonicalPackageNames()和canonicalToCurrentPackageNames()方法。什么是规范化包名?它在哪里使用(其目的是什么)?什么时候与当前包名不同?
例如,在我的Nexus S上,浏览器应用程序的当前包名为“com.google.android.browser”,其规范名称也是“com.google.android.browser”。对于我检查过的其他一些应用程序,我也得到了相同的当前和规范化包名。developer.android.com和源代码都没有给我解释什么是规范化包名。希望这能帮助更好地理解我上面的问题。
1个回答

3

以下是开发人员文档:

http://developer.android.com/reference/android/content/pm/PackageManager.html

public abstract String[] currentToCanonicalPackageNames (String[] names)

此方法将当前包名称数组转换为规范化的包名称数组。
Added in API level 8
Map from the current package names in use on the device to whatever the current canonical name of that package is.

Parameters
names   Array of current names to be mapped.
Returns
Returns an array of the same size as the original, containing the canonical name for each package.

public abstract String[] canonicalToCurrentPackageNames (String[] names)

这个方法用于将给定的一组字符串表示的包名转换为当前运行环境中的包名。
Added in API level 8
Map from a packages canonical name to the current name in use on the device.

Parameters
names   Array of new names to be mapped.
Returns
Returns an array of the same size as the original, containing the current name for each package.

请查看以下链接以更好地了解源代码: https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/core/java/android/app/ApplicationPackageManager.java 请参考以下 StackOverflow 问题:如何获取 Android 默认应用程序包的规范名称

是的 :) 但是规范包名具体代表什么?当前包名和规范包名有什么区别?何时/何地使用它?我在developer.android.com上没有找到答案。 - alexaschka
谢谢,但是那些链接仍然没有回答我的问题。(另一个StackOverflow的问题只是展示了如何获取这些规范名称,而且这些来源甚至没有文档。但是它们都没有说明这些规范名称到底是什么,它们的目的是什么等等)。 - alexaschka
我知道这是一个非常老的问题,但我只想指出Google自己使用了“getCanonicalName()”作为一个很好的例子,说明文档中应该记录什么是规范名称。在这里查看他们的样式指南:http://google.github.io/styleguide/javaguide.html#s7.3.1-javadoc-exception-self-explanatory - Abe Fehr
@AbeFehr 得到更多和新的信息总是很棒的。 - Jared Burrows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接