Generate Jar package
android{...}
task makeJar(type: Copy) {
delete 'build/libs/syssdk.jar'
from('build/intermediates/intermediate-jars/release/')//jar文件来源
into('build/libs/') //生成路径
include('classes.jar')
rename('classes.jar', 'syssdk.jar') //命名为syssdk.jar
}
makeJar.dependsOn(build)
BuildType depends on configuring different environments and configuring different parameters for different environments (BASEURL)
android{
defaultConfig {...}
buildTypes {
release {
buildConfigField "String", "BASEURL", '"https://api.xxx.cn/xxx/"'
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
buildConfigField "String", "BASEURL", '"https://dev-api.xxx.cn/xxx/"'
}
pre.initWith(debug)
pre {
buildConfigField "String", "BASEURL", '"https://test-api.xxx.cn/xxx/"'
//如果依赖项没有pre的BuildType,按release、debug的优先级匹配
matchingFallbacks = ['debug', 'release']
}
}
Support Java8
android{
defaultConfig {...}
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
}
Configure different layout folders and jniLibs
sourceSets {
main {
res.srcDirs =
[
'src/main/res/layouts/loginuikit',
'src/main/res/layouts/homeuikit',
'src/main/res/layouts',
'src/main/res'
]
jniLibs.srcDirs = ['libs']
}
}
Configure Maven to upload lib to remote or local maven library
Module gradle file to upload
apply plugin: 'com.android.library'
android {...}
dependencies { ...}
group 'com.lib'
ext {
artifactId = 'log'
}
def mavenFile = rootProject.file('push-maven.gradle')
if (mavenFile.exists()) {
apply from: mavenFile
}
The push-maven.gradle file needs to be placed in the project root directory
apply plugin: 'maven'
if (project.hasProperty("android")) { // Android libraries
android {
lintOptions {
abortOnError false
ignoreWarnings true
}
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc) {
javadoc.options.setOutputLevel(JavadocOutputLevel.QUIET)
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
} else { // Java libraries
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
//archives javadocJar
archives sourcesJar
}
def version = System.getProperty("version") ?: "" //gradlew :db:uploadArchives -D version=1.0.0-SNAPSHOT
def mavenUrl = version.contains("SNAPSHOT") ? "snapshot" : "release"
uploadArchives {
repositories {
mavenDeployer {
//此处可以替换为本地地址 repository(url: uri("${rootProject.projectDir}/repo"))
repository(url: "http://xxx.xxx.com/nexus/content/repositories/app-$mavenUrl/") {
authentication(userName: "xxx", password: "xxx")
}
pom.version = "$version"
pom.artifactId = "$artifactId"
pom.groupId = "$project.group"
}
}
}
Execute under terminal:
gradlew :log:uploadArchives -D version=1.0.0-SNAPSHOT
Upload lib to Maven library
Add your remote maven library in build.gradle in the root directory
buildscript {
repositories {
google()
jcenter()
// 添加本地maven地址配置
maven {
url uri("${rootProject.projectDir}/repo")
}
maven {
url "http://xxx.xxx.com/nexus/content/repositories/app-release/"
}
maven {
url "http://xxx.xxx.com/nexus/content/repositories/app-snapshot/"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
}
}
allprojects {
repositories {
google()
mavenCentral()
jcenter()
maven {
url "http://xxx.xxx.com/nexus/content/repositories/app-release/"
}
maven {
url "http://xxx.xxx.com/nexus/content/repositories/app-snapshot/"
}
}
gradle.projectsEvaluated {...}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Then you can rely on the following:
api 'com.lib:log:1.0.0-SNAPSHOT'
Automatically modify the package name after packaging
//自动修改apk报名
android {
android.applicationVariants.all {
variant ->
variant.outputs.all {
def apkName = "xxx_${buildType.name}"
outputFileName = apkName + "_${defaultConfig.versionName}_${defaultConfig.versionCode}" + "_${buildTime()}" + ".apk"
}
}
}
def buildTime() {
def date = new Date()
def formattedDate = date.format('yyyyMMdd')
return formattedDate
}