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')
                )
            }
        }
    }
}