首先需要理解 flavorDimensions 写法:
android {
flavorDimensions "listpopup"
productFlavors {
normal {
dimension "listpopup"
}
dragsort {
dimension "listpopup"
}
}
}
本例定义了两个flavor:normal 、dragsort ,其维度为 “listpopup”,意即在DropDownListView
这个类上有区分。
其中 normal 分支的DropDownListView.java
基于 ListView
,而 dragsort 分支则基于 DragSortListView.java
,为此下拉菜单实现了拖拽排序(com.mobeta.android.dslv.DragSortListView
)。
于是要根据不同分支切换代码源集:
android{
sourceSets{
normal {
java.srcDirs += ['src/listpopup_normal/java']
}
dragsort {
java.srcDirs += ['src/listpopup_dragsort/java']
}
}
}
将不同版本的 DropDownListView.java 分别放入 src/listpopup_normal/java、和 src/listpopup_dragsort/java 文件夹中。原来 src/main/java 是这么个意思!注意源码放置位置仍要和包名一致。
最后,需要告诉 maven Publish 插件怎么打包。网上很多都是教 artifact 写法,这样打包出来的 pom 文件中不含依赖项,是不合理的。要用 components 写法,指定打包内容:
apply plugin: 'maven-publish'
afterEvaluate {
publishing {
publications {
normal(MavenPublication) {
from components.normalRelease
// 不推荐 artifact 写法
//artifact tasks.findByName("bundleNormalReleaseAar")
groupId "org.appxmod.android"
artifactId "AppCompat"
version "1.0.0"
}
dragsort(MavenPublication) {
from components.dragsortRelease
groupId "org.appxmod.android"
artifactId "AppCompatDrag"
version "1.0.0"
}
}
}
}
build.finalizedBy publishToMavenLocal
打包速度也是很快的!
最后,用 jadx-gui 反编译(拖动aar文件至jad窗口),验证是正确打包了的。