將module寫成cordova插件

前言:最近公司app需要集成一個即時通訊的框架,這個框架不是主流的即時通訊框架,所有隻有原生ios和android的集成方式(h5的也有,但是應該不是很穩定,框架是這樣介紹的)。由於公司app是ionic框架寫的,所以在集成之初我就感到了有些難度,因爲之前寫的cordova插件都只是調用了原生的一些硬件和數據(攝像頭、相冊、設備ID等),最多就是再加一個jar包。但是這個im框架給你的是一個module,放在原生裏做就是將這個module裏面對象初始化再調用一個方法就可以開始即時通訊....就這麼簡單.........      但是問題來了,module怎麼集成爲cordova插件呢,我看別人的cordova插件也沒有寫很多個類和xml文件啊........  幾天過後...  冒出個想法  可不可以把這個module打包爲aar包再引入呢?  說幹就幹!!!

1、首先解決module本身存在的一些錯誤,類引用錯誤或者R文件引用錯誤等。

2、打包aar

在android studio中點擊右側的gradle,可以看到你的項目還有module,然後雙擊 module(你的module名)/Tasks/build/assemble開始打包,打包成功後在你的module/build/outputs/aar下可以看到你的aar包

3、爲了方便後續介紹,就姑且將module命名爲 xmIM吧  那麼aar就是xmIM-release.aar

打包好後先測試一下,新建一個android項目,將xmIM複製到libs目錄下,並在項目的build.gradle文件裏引入

dependencies {
    //    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:27.0.0'
    compile(name: 'xmIM-release', ext: 'aar')
}

並且在dependencies上面加上

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.0"
    defaultConfig {
        applicationId "com.example.administrator.myapplication"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
}

然後再MainActivity裏面調用aar包裏面的方法,這時候發現一個問題,類被重複引用! 原來,我這個module本身就引用了一些jar和aar文件,然後再在新建的項目裏面引用就造成了重複引用。

經過多次測試,發現aar包裏引用的jar包不用重複引入,但是aar包需要在新建項目裏重新引用! 還沒有去深思這是爲啥。

到這一步應該能在新建項目裏引用aar包裏面的類方法了。有什麼問題歡迎留言一起討論。


4、將arr包集成到cordova插件 

首先新建一個cordova插件,方法請戳我

這裏是我的插件demo,目錄如下:


aar文件我直接放在了android目錄下,gradle文件我也放進來了,並進行了重命名。aar與gradle文件需要在plugin.xml文件裏面配置。


下面是gradle文件的配置,項目引用的網絡上的sdk也要在這裏引入,aar包也需要在這裏引入。上文module引入了一些jar包,module打包成aar包後不需要重新引入jar包。



下面說一下過程中高發的錯誤-----------------------------------------------------------------

1、com.android.ide.common.process.ProcessException: Failed to execute aapt

這種錯誤可以試試切換maven源,百度有很多阿里源,先拋出一個=====>http://maven.aliyun.com/nexus/content/groups/public/

2、Suggestion: add 'tools:replace="android:icon"' to element 這種大部分原因是資源文件重複

解決方法如下:

分別在manifest和application中加入如下內容:

<manifest  

xmlns:tools="http://schemas.android.com/tools">

<application  

tools:replace="android:icon">


寫的太倉促,很多地方都說的有點模糊,如有什麼不懂的儘管留言!有路過的大哥也請指教!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章