1

我使用 aapt 的 --rename-manifest-package 来生成 env 特定的包。

看到这个问题

prod 中的包名,我使用

com.xxx.app

对于 uat 环境,我使用

com.xxx.app.uat

在我添加phonegap之前它工作正常,我使用的是codorva 2.2,它给了我以下错误

12-12 19:02:36.156: E/PluginManager(13188):     =====================================================================================
12-12 19:02:36.156: E/PluginManager(13188): ERROR: plugin.xml is missing.  Add       res/xml/plugins.xml to your project.
12-12 19:02:36.156: E/PluginManager(13188): https://git-wip-us.apache.org/repos/asf?     p=incubator-cordova-android.git;a=blob;f=framework/res/xml/plugins.xml  
12-12 19:02:36.156: E/PluginManager(13188): =====================================================================================

我终于追溯到 PluginManager 中的以下代码

int id = this.ctx.getActivity().getResources().getIdentifier("config", "xml", this.ctx.getActivity().getPackageName());
...
XmlResourceParser xml = this.ctx.getActivity().getResources().getXml(id);

id 为 0,这意味着它无法引用 config.xml getActivity().getPackgeName() 给出替换的包名称 - “ com.xxx.app.uat

看起来 .getResources().getIdentifer() 没有更新到新包……这可能是 android 的错误吗?

在我的测试用例中,如果我使用 R.xml.config,它会毫无问题地引用 config.xml。

问题是我无法更改作为 Phonegap 代码库一部分的 PluginsManager ...

4

1 回答 1

1

我遇到过同样的错误,但我的处理方式与 Rick Li 不同。应用程序首先尝试使用上下文的包名加载资源,如果这不起作用(id 仍然为 0),应用程序会尝试从 Activity 的类包名中加载资源。

int id = this.ctx.getActivity().getResources().getIdentifier("config", "xml", this.ctx.getActivity().getPackageName());
        if (id == 0) {
            // could not find the resource id, maybe we are using the wrong package name ? (the package name could have been changed via aapt at build time).
            id = this.ctx.getActivity().getResources().getIdentifier("config", "xml", this.ctx.getActivity().getClass().getPackage().getName());
            if(id == 0){
                this.pluginConfigurationMissing();
                //We have the error, we need to exit without crashing!
                return;
            }
        }
于 2013-08-01T18:19:22.047 回答