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,找了好多方法都是有問題,都快絕望的時候,我就想着試一試
直接往進導,我去竟然成功了。
然後就成功了,成功了。