将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
<application