Android 如何使用gradle将所有flavor APK上传到nexus?
因此,我已经成功地使用Android 如何使用gradle将所有flavor APK上传到nexus?,android,maven,gradle,nexus,Android,Maven,Gradle,Nexus,因此,我已经成功地使用uploadArchives任务将aar库上载到Nexus。 我现在想用APK做同样的事情,但目前还没有真正做到。 我也在做同样的事情,但包装不同。但这并不能起作用 我现在想知道使用uploadArchives任务是否真的是这样做的,或者我是否应该使用不同的任务。 下面是我现在使用的代码,让我上传aar库: uploadArchives { repositories { mavenDeployer { repository(u
uploadArchives
任务将aar库上载到Nexus。
我现在想用APK做同样的事情,但目前还没有真正做到。
我也在做同样的事情,但包装不同。但这并不能起作用
我现在想知道使用uploadArchives
任务是否真的是这样做的,或者我是否应该使用不同的任务。
下面是我现在使用的代码,让我上传aar库:
uploadArchives {
repositories {
mavenDeployer {
repository(url: getPropertyValue('mUrl')+"/content/repositories/releases/") {
authentication(userName: getPropertyValue('mUserName'), password: getPropertyValue('mPassword'))
}
def version = getPropertyValue('version')
_productFlavors.each { name, config ->
def releaseName = name+"Release"
addFilter(releaseName) { artifact, file ->
artifact.attributes.classifier.equals(releaseName)
}
pom(releaseName).artifactId = "artifact"
pom(releaseName).version = version
pom(releaseName).groupId = "com.example."+name
pom(releaseName).packaging = "apk"
}
}
}
}
虽然有点晚了,但我还是设法使用旧的普通httpclient实现了这一点
def uploadToRepository(File file, String folder, String url, String userName, String password){
if(url != null && !url.isEmpty()){
def client = new DefaultHttpClient()
def post = new HttpPost("${url}/content/repositories/releases/${folder}/myapk.apk");
def entity = new MultipartEntity()
def fileBody = new FileBody(file, "application/vnd.android.package-archive", file.name)
entity.addPart("file", fileBody)
post.entity = entity
def basicAuthString = "Basic " + "${userName}:${password}".bytes.encodeBase64().toString()
post.addHeader('Authorization', basicAuthString);
post.setEntity(entity);
def response = client.execute(post);
if(response.getStatusLine().getStatusCode() == 201)
println "${file.name} uploaded"
}
}
uploadArchives {
repositories {
mavenDeployer {
def version = getPropertyValue('version')
def buildVersion = ''
_productFlavors.each { name, config ->
def releaseName = name+"Release"
addFilter(releaseName) { artifact, file ->
artifact.attributes.classifier.equals(releaseName)
}
def fileName = "${project.buildDir}\\outputs\\apk\\something.app-${name}-release.apk"
def file = new File(fileName)
uploadToRepository(
file,
"com/something/${name.replaceAll('_','/')}/something/${version+buildVersion}/",
getPropertyValue('mUrl'),
getPropertyValue('mUserName'),
getPropertyValue('mPassword')
)
}
}
}
}
虽然有点晚了,但我还是设法使用旧的普通httpclient实现了这一点
def uploadToRepository(File file, String folder, String url, String userName, String password){
if(url != null && !url.isEmpty()){
def client = new DefaultHttpClient()
def post = new HttpPost("${url}/content/repositories/releases/${folder}/myapk.apk");
def entity = new MultipartEntity()
def fileBody = new FileBody(file, "application/vnd.android.package-archive", file.name)
entity.addPart("file", fileBody)
post.entity = entity
def basicAuthString = "Basic " + "${userName}:${password}".bytes.encodeBase64().toString()
post.addHeader('Authorization', basicAuthString);
post.setEntity(entity);
def response = client.execute(post);
if(response.getStatusLine().getStatusCode() == 201)
println "${file.name} uploaded"
}
}
uploadArchives {
repositories {
mavenDeployer {
def version = getPropertyValue('version')
def buildVersion = ''
_productFlavors.each { name, config ->
def releaseName = name+"Release"
addFilter(releaseName) { artifact, file ->
artifact.attributes.classifier.equals(releaseName)
}
def fileName = "${project.buildDir}\\outputs\\apk\\something.app-${name}-release.apk"
def file = new File(fileName)
uploadToRepository(
file,
"com/something/${name.replaceAll('_','/')}/something/${version+buildVersion}/",
getPropertyValue('mUrl'),
getPropertyValue('mUserName'),
getPropertyValue('mPassword')
)
}
}
}
}