发布项目至JCenter请前往AndroidStudio发布项目到Maven(JCenter)
本文将介绍上传构建过程中遇到的问题以及上传至Bintray因网路问题失败的解决办法。
1:报错信息:ExampleUnitTest.java:15: 错误: 找不到符号。解决办法:在你要发布的模块中的build.gradle中添加如下代码:还需要检查其他模块和app模块是否已添加。
android {
defaultConfig {
//加上这一句
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//加上这三句
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
2:报错信息:Conflict with dependency 'com.android.support:support-annotations'in project。解决办法:在你的app项目中build.gradle中加入下面一句话
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:27.1.1'
}
3:报错信息:错误: 编码GBK的不可映射字符。解决办法:在项目根build.gradle中添加如下代码:
allprojects {
//编译时报注释GBK编码错误解决
tasks.withType(Javadoc) {
options.addStringOption('encoding', 'UTF-8')
options.addStringOption('charSet', 'UTF-8')
}
}
4:报错信息:@return或@param不能为空,解决办法:
allprojects {
//编译时报注释GBK编码错误解决
tasks.withType(Javadoc) {
//方法上忽略@return和@param注解未添加说明注释
options.addStringOption('Xdoclint:none', '-quiet')
//解决GBK编码错误提示
options.addStringOption('encoding', 'UTF-8')
options.addStringOption('charSet', 'UTF-8')
}
}
5:其他情况编译失败尝试在你的app和模块中的build.gradle中添加如下代码:
//忽略警告
android {
//忽略警告
lintOptions {
abortOnError false
}
}
6:Skipping upload for missing file D:xx\xx\xx.jar
今天在更新版本至Bintray时报Skipping upload for missing file D:xx\xx\xx.jar 错误,还有相同的错误后缀为.pom或者其他文件..导致最后只成功上传一个.aar文件甚至上传成功后目录为空。
解决办法:
//1:在AndroidStudio中的Terminal中执行 gradlew generatePomFileForReleasePublication
//2:再次执行 gradlew publishReleasePublicationToMavenLocal
//3:最后执行gradlew clean build bintrayUpload -PbintrayUser=你的Bintray用户名 -PbintrayKey=用户下的API KEY -PdryRun=false
7:上传\更新项目至Bintray因网络问题失败解决办法
当其他错误都排除了,上传\更新代码库经过漫长的等待后,经常socket异常...不管翻不翻墙都会出现95%以上几率上传至bintray失败,所以解决网络问题显然是很鸡肋的。本文解决办法是换个姿势更新\上传你的新版本:将你的模块在本地构建成包含.aar、.pom、.jar的.zip压缩文件,再手动将你的.zip文件上传至Bintray,上传成功后Bintray内部会自动解压缩还原项目目录。
7.1:准备.gradle配置文件
创建一个xxx.gradle文件,将下面内容完整拷贝至xxx.gradle中
//应用插件 maven
apply plugin: 'maven'
//声明你的包名
def groupId = 'xxx.xxx'
//声明模块名称
def artifactId = 'xxx.xxx'
//要发布的版本号
def version = '1.0.1'
def localReleaseDest = "${buildDir}/release/${version}"
task androidJavadocs(type: Javadoc) {
failOnError = false
source = android.sourceSets.main.java.srcDirs
ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath += files(ext.androidJar)
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
//Maven本地仓库构建
uploadArchives {
repositories.mavenDeployer {
pom.groupId = groupId
pom.artifactId = artifactId
pom.version = version
// Add other pom properties here if you want (developer details / licenses)
repository(url: "file://${localReleaseDest}")
}
}
//压缩为zip
task zipRelease(type: Zip) {
from localReleaseDest
destinationDir buildDir
archiveName "release-${version}.zip"
}
//输出到本地补录,位于你的模块中的build下
task generateRelease {
doLast {
println "Release ${version} can be found at ${localReleaseDest}/"
//注意此处,Windows系统需要加入\\转义符,Mac请去掉转义符"\\"
println "Release ${version} zipped can be found ${buildDir}\\release-${version}.zip"
}
}
generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
7.2:配置要发布\更新的模块build.gradle文件
//在你要发布的模块build.gradle中头部配置
apply from: 'xxx.gradle'
7.3:在你的发布\更新的模块根目录下运行构建命令
AndroidStudio 的Termianl 中cd 到你的模块的根目录下,输入如下命令,执行。
//gradlew在模块中是找不到命令的,因此你需要调用上一级(根目录)的gradlew
..\gradlew generateRelease
//当然也可以直接在根目录运行构建命令的,啊哈哈
gradlew generateRelease
如果构建完成后找不到.zip压缩包,可自行到模块-build-release-版本号-目录中,将你的文件夹手动压缩成ZIP
7.4:手动上传至Bintray
-
7.4.1:添加一个版本
构建成功后检查zip文件的完成性,确认无误后前往Bintray添加一个版本,然后上传文件。
-
7.4.2:上传文件
上传成功后你看到的应该是这样的
其他错误发现后持续更新...