cordova插件的完成

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包的方法成了編譯,把插件更改之後,竟然還是打包的上一次的結果,通過這個方法把這個插件完全清理乾淨之後,纔可以新的編譯

  1. Remove the platform: ionic cordova platform rm android
  2. Delete the following folders from your app folder: platforms,plugins & www
  3. Make sure your dependencies are available by running: npm install
  4. Add back the platform, this step will recreate the folders deleted in step 2 above: ionic cordova platform add android
  5. 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包的問題搞定了,但是又出來問題了,

android.os.SystemProperties

這個類找不到,我還是走不不少歪路的,先查的資料是需要jar包,把

Android SDK\platforms\android-xx\data\layoutlib.jar文件加到當前工程的附加庫路徑中,然後在源程序中就可以Import了。


可是我的插件就是用不了jar包,然後我急中生智,就把SystemProperties類的源代碼找到,寫了進去,悔不該不在android中測試啊,這是個隱藏類,不能這麼用,一直出bug,後來纔想到有可能是這個問題,然後就繼續找方法唄

通過動態獲取的方法獲取這個類的兩個方法get和set

public static String getProperty(String key, String defaultValue) {
String value = defaultValue;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
value = (String)(get.invoke(c, key, "unknown" ));
} catch (Exception e) {
e.printStackTrace();
}finally {
return value;
}
}

public static void setProperty(String key, String value) {
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method set = c.getMethod("set", String.class, String.class);
set.invoke(c, key, value );
} catch (Exception e) {
e.printStackTrace();
}
}

好了,下一個bug

在android中,調用這個方法是把自己傳了進去,在cordova中怎麼辦,這個我們就在debug模式中調試,好了,知道了,原來是需要傳入context,拿在cordovaplugin中有沒有context,找了好多方法都是有問題,都快絕望的時候,我就想着試一試

import android.content.Context;
private Context context;

直接往進導,我去竟然成功了。

然後就成功了,成功了。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章