cordova自己完成插件这件事在历时4天之后终于完成,期间真的是查阅各种资料,几经放弃。
首先在插件中包含jar包这件事上,就让我各种找办法解决,网上找的方法,写完之后,完全不能在ionic中使用。
后来从github下载的官网提供的带jar包的插件,还是会报错,报出几个xml文件找不到
cp: copyFileSync: could not write to dest file (code=ENOENT):/Users/mehdigriche/work/cam1/test/platforms/android/res/xml/config.xml
Parsing /Users/mehdigriche/work/cam1/test/platforms/android/res/xml/config.xml failed (node:2306) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: ENOENT: no such file or directory, open '/Users/mehdigriche/work/cam1/test/platforms/android/res/xml/config.xml'
在网上百度了各种解决办法,还去谷歌各种查
终于找到一个办法
更改Api.js下的这段文件
root: self.root,
www: path.join(self.root, 'assets/www'),
res: path.join(self.root, 'res'),
platformWww: path.join(self.root, 'platform_www'),
configXml: path.join(self.root, 'res/xml/config.xml'),
defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'),
strings: path.join(self.root, 'res/values/strings.xml'),
manifest: path.join(self.root, 'AndroidManifest.xml'),
build: path.join(self.root, 'build'),
javaSrc: path.join(self.root, 'src'),
// NOTE: Due to platformApi spec we need to return relative paths here
cordovaJs: 'bin/templates/project/assets/www/cordova.js',
cordovaJsSrc: 'cordova-js-src'
更改为:
root: self.root,
www: path.join(self.root, 'assets/www'),
res: path.join(self.root, 'res'),
platformWww: path.join(self.root, 'platform_www'),
configXml: path.join(self.root, 'app/src/main/res/xml/config.xml'),
defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'),
strings: path.join(self.root, 'app/src/main/res/values/strings.xml'),
manifest: path.join(self.root, 'app/src/main/AndroidManifest.xml'),
build: path.join(self.root, 'build'),
javaSrc: path.join(self.root, 'app/src/main/java/'),
// NOTE: Due to platformApi spec we need to return relative paths here
cordovaJs: 'bin/templates/project/assets/www/cordova.js',
cordovaJsSrc: 'cordova-js-src'
文件是找到了,但是jar包里面的方法又出问题了,无法再java文件中找到,而且吧,即使不用的jar包的方法成了编译,把插件更改之后,竟然还是打包的上一次的结果,通过这个方法把这个插件完全清理干净之后,才可以新的编译
- Remove the platform:
ionic cordova platform rm android
- Delete the following folders from your app folder:
platforms
,plugins
&www
- Make sure your dependencies are available by running:
npm install
- Add back the platform, this step will recreate the folders deleted in step 2 above:
ionic cordova platform add android
- Finally, build your app:
ionic cordova build android
所以上面那种更改Api.js的方法,肯定是有问题了。
后来试了下ionic中的几个插件,发现都是java文件的就可以使用,我都在下载到本地再进行加入的
有些会出现这个问题
variable missing(use:--variable API_KEY=value)问题
只需要在后面加上 --variable API_KEY=09cc87d24aeae2673cf111f 后面那串可以随便更改,即完美解决。
既然jar包不行,nnd一气之下就把jar包反编译,都变成java文件,然后加入
编译还是出错,说java文件找不到,nnd,检查之后发现原来是包名的问题,好解决,建立正确的文件夹就可以了,但是问什么自动生成的那个java文件的包名就可以随便改,我就不清楚了。
好了,现在jar包的问题搞定了,但是又出来问题了,
这个类找不到,我还是走不不少歪路的,先查的资料是需要jar包,把
Android SDK\platforms\android-xx\data\layoutlib.jar文件加到当前工程的附加库路径中,然后在源程序中就可以Import了。
可是我的插件就是用不了jar包,然后我急中生智,就把SystemProperties类的源代码找到,写了进去,悔不该不在android中测试啊,这是个隐藏类,不能这么用,一直出bug,后来才想到有可能是这个问题,然后就继续找方法呗
通过动态获取的方法获取这个类的两个方法get和set
好了,下一个bug
在android中,调用这个方法是把自己传了进去,在cordova中怎么办,这个我们就在debug模式中调试,好了,知道了,原来是需要传入context,拿在cordovaplugin中有没有context,找了好多方法都是有问题,都快绝望的时候,我就想着试一试
直接往进导,我去竟然成功了。
然后就成功了,成功了。