2016-04-29 39 views
1

所以我已經成功地使用uploadArchives任務上傳aar庫到Nexus。 我想和apks一起做同樣的事情,但目前還沒有真正做到這一點。 我幾乎做同樣的事情,但不同的包裝。但這並不能解決問題。如何使用gradle將所有風格的apks上傳到nexus?

我想知道現在是否使用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" 
      } 
     } 
    } 
} 

回答

0

來得有點晚,但我設法得到這個工作使用舊平原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') 
       ) 
      } 
     } 
    } 
} 
相關問題