前言:最近公司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
<application