前言:最近需要是将项目中的几个模块以SDK的方式提供给其他APP集成,总结如下。
一、jar和aar的区别:
jar只包含源代码以及清单文件;aar不仅包括源代码及清单文件,还包含了布局以及资源文件等。由此可见,我们需要将项目打包成aar提供给其他APP集成。
二、项目打包aar的步骤:
1、修改AndroidManifest.xml
去除<application>标签中的name,label,icon等属性,去除intent-filter启动项
<application>
<activity
android:name=".function.main.activity.YDSplashActivity"
android:theme="@style/ydsdk_SplashTheme">
<!--<intent-filter>-->
<!--<action android:name="android.intent.action.MAIN" />-->
<!--<category android:name="android.intent.category.LAUNCHER" />-->
<!--</intent-filter>-->
</activity>
</application>
2、修改build.gradle
修改apply plugin, applicationId
//将application修改成library
apply plugin: 'com.android.library'
//apply plugin: 'com.android.application'
//去除applicationId
defaultConfig {
//applicationId "com.yunda.AgentApp"
minSdkVersion 17
targetSdkVersion 22
versionCode 1220
versionName "1.2.2"
multiDexEnabled true
buildConfigField("String", "API_HOST", "${API_TEST_HOST}")
ndk {
abiFilters "armeabi"
}
}
3、修改资源文件名
防止和集成的APP有冲突,需要统一修改资源文件以及图片的名称,在build.gradle的android中添加如下代码:
//资源文件以ydsdk为开头,避免与待集成app冲突
resourcePrefix "ydsdk_"
这个时候未修改的资源文件名会报红,需要自己手动修改,暂时没找到统一修改的方法,以及图片名也需要手动修改。
4、解决Application的问题
由于一个APP只能有一个Application,所以需要解决SDK项目的Application初始化的问题。这里新建了一个类,用于集成之后进行初始化,以及获取全局的Application。
/**
* 类名: YDMarketSDK
* 描述: 初始化SDK
* 日期: 2019/10/24
*
* @author: xxx
*/
public class YDMarketSDK {
//提供给第三方调用,进行初始化
public static void initSDK(Context context) {
mContext = context;
}
public static Context getContext() {
return mContext;
}
}
5、解决compile引入的maven无法打到aar中
需要下载对应的jar到本地项目的lib下面进行引入,注意:如果项目有引入aar的话,是无法打到aar中的
// compile 'com.google.code.gson:gson:2.7'
// compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile files('libs/gson-2.7.jar')
compile files('libs/okhttp-3.4.1.jar')
compile files('libs/okio-2.2.1.jar')
compile files('libs/kotlin-stdlib-1.3.11.jar')
// 无法将引入的aar打包到sdk中,下载对应的源代码拷贝到项目中即可
// compile 'com.daimajia.swipelayout:library:1.2.0@aar'
7、aar代码混淆
和APP代码混淆一样,参考我的另一篇文章
8、进行打包
通过assembleRelease命令打arr
打包.png
在build->outputs->aar文件夹下面生成了对应release的aar
生成的aar.png
三、项目引入aar
1、将aar放到项目中的libs中libs.png
2、在app->build.gradle中添加:
repositories {
flatDir {
dirs 'libs' //系统将在lib目录下搜索依赖
}
}
//在dependencies中添加
compile(name: 'app-release', ext: 'aar')
3、初始化SDK
初始化.png
4、打开SDK
打开SDK.png
至此SDK的开发集成已告一段落,未完待续...

打包.png
生成的aar.png
libs.png
初始化.png
打开SDK.png











网友评论