ionic工程引入cordova plugin camera 插件编译报错问题总结

由于ionic项目要用到拍照和相册选择的功能,首先就想到了要用到cordova-plugin-camera这个插件,上网搜了一下这个插件的用法,贴两个比较好的文章:

插件用法demo:http://www.cnblogs.com/BetterMyself/p/7117133.html
中文API文档:http://blog.csdn.net/michael_ouyang/article/details/75085648?fps=1&locationNum=2

按照上诉所有步骤做好后,将ionic工程编译导入eclipse中进行编译和调试。(原始的安卓工程导入会有报错,要添加一个jar包;在AndroidManifest.xml文件中把#{applicaton_id}替换成项目的packagename;project.properties文件中设置打包时的编译器版本)

然后问题来了,仍然有报错,在说明有哪些问题和怎么解决之前,先说下我的ionic开发环境:

Cordova CLI: 5.3.1
Ionic CLI Version: 2.1.13
Ionic App Lib Version: 2.1.7
ios-deploy version: Not installed
ios-sim version: Not installed
OS: Windows 7
Node Version: v4.2.2
Xcode version: Not installed

首先,第一个问题就是项目报错,报错文件为:src/org/apache/cordova/camera/CordovaUri.java,报错代码为:

public Uri getCorrectUri()
    {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            return androidUri;
        else
            return fileUri;
    }

Build.VERSION_CODES.M这句报错,这个是工程开发环境的安卓sdk包版本的原因,报错的版本是api22(android 5.1.1),在项目设置中改成api23(android 6.0)就好了,然后把工程的targetSdkVersion改为23(AndroidManifest.xml和project.properties文件都要改),改完后,这个错误就消失了。

弄完这就可以连接真机调试了,调试的时候发现,在调用相机的时候调用不成功,运行报错了,空指针错误。跟进代码调试…
最后发现是src/org/apache/cordova/camera/CordovaUri.java中142行的this.applicationId获取到的为空导致的错误,具体获取的代码为:

this.applicationId = (String) BuildHelper.getBuildConfigValue(cordova.getActivity(), "APPLICATION_ID");
this.applicationId = preferences.getString("applicationId", this.applicationId);

怀疑是不是在项目导入eclipse的时候在AndroidManifest.xml文件把#{application_id}替换成了包名的缘故。据说在Android_studio中可以识别#{application_id},还没亲身试过。
解决办法是把这两行注释掉,替换成:

this.applicationId = cordova.getActivity().getPackageName();

重新编译调试,调用相机成功!

注:第二个问题在国外网站发现有类似的,是在cordova-plugin-camera插件从2.1.1升级到2.3.1之后出现的问题,大神们给的解决办法有的是升级cordova-plugin-compat插件,因为原始的获取this.applicationId的方法是要基于这个插件的;但是我项目中这个插件已经是最新的了,最后通过修改camera插件源码解决的问题。

相关文章
相关标签/搜索