Skip to content

Latest commit

 

History

History
131 lines (86 loc) · 4.62 KB

PUBLISH.md

File metadata and controls

131 lines (86 loc) · 4.62 KB

https://github.com/blundell/release-android-library I've been having a lot of practical problems publishing this project to JCenter/Maven - and I've managed to nearly forget the solution every time.

So this is mostly a note to myself.

##The problem This project produces three .aar Java libraries and an Android .apk application, which depend on eachother like this:

fast-barcode-scanner-demo.apk => fast-barcode-scanner.aar => still-sequence-camera.aar
                                                          => tracking-barcode-scanner.aar

The problem is that the build.gradle file for fast-barcode-scanner contains the following internal references:

dependencies {
    ...
    compile project(':still-sequence-camera')
    compile project(':tracking-barcode-scanner')
}

Let's say I want to release version 1.0.4. If I go ahead and do that, the first app referencing the new fast-barcode-scanner-1.0.4.aar will get compilation errors that the internal references to still-sequence-camera.aar and tracking-barcode-scanner.aar cannot be resolved.

So I update the build.gradle references to properly versioned refs:

dependencies {
    ...
    compile 'dk.schaumburgit.fast-barcode-scanner:still-sequence-camera:1.0.4'
    compile 'dk.schaumburgit.fast-barcode-scanner:tracking-barcode-scanner:1.0.4'
}

But now the fast-barcode-scanner project won't build because version 1.0.4 hasn't been released yet.

Catch-22: I naturally cannot release until I've built - but I cannot build until I've released!

The solution of course if to work by way up the dependency tree: first build and release the two independent projects in version 1.0.4, then update the references in the intermediate fast-barcode-scannerlibrary and build-and-release that, and finally update-build-and-release the top-level fast-barcode-scanner-demo project

##Define the release First, log into JCenter at https://bintray.com/ and create the new release in JCenter:

(screenshot)

Next, in each of the 4 gradle files, edit

ext {
    ...
    PUBLISH_VERSION = '1.0.4'
}

##Release the independents Now release the two projects without dependencies, still-sequence-camera and tracking-barcode-scanner:

cd still-sequence-camera
..\gradlew clean build generateRelease
cd ..

cd tracking-barcode-scanner
..\gradlew clean build generateRelease
cd ..

This produces two zip files ready for upload:

still-sequence-camera\build/release-1.0.4.zip
tracking-barcode-scanner\build/release-1.0.4.zip

These can be uploaded by clicking "Upload files":

photo2a

Now, for each of the zip files, do the following (first all the steps for one, then all the steps for the other - trying to combine have given problems).

Drag the zip onto the download area:

photo 2b

Remember to click "Explode this file" before clicking "Save changes".

Then click "Publish":

photo3

##Release the library project Now that the two libraries are available as properly versioned entities, the library project can be updated to reference them.

In the fast-barcode-scanner\build.gradle file, update the references from local project references to proper versioned references:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'dk.schaumburgit.fast-barcode-scanner:still-sequence-camera:1.0.4'
    compile 'dk.schaumburgit.fast-barcode-scanner:tracking-barcode-scanner:1.0.4'
    //compile project(':still-sequence-camera')
    //compile project(':tracking-barcode-scanner')
}

Then build and package:

cd fast-barcode-scanner
..\gradlew clean build generateRelease
cd ..

Like before, this produces a zip-file ready for upload:

fast-barcode-scanner\build\release-1.0.4.zip

Upload and publish like before.

##Release the demo

Though the demo is never referenced using a gradle reference, we'll publish it in JCenter too, just for completeness.

In fast-barcode-scanner-demo\build.gradle, update the reference to the fast-barcode-scanner library:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.android.support:support-v13:23.1.0'
    compile 'dk.schaumburgit.fast-barcode-scanner:fast-barcode-scanner:1.0.4'
    -//compile project(':fast-barcode-scanner')-
}

Build:

cd fast-barcode-scanner-demo
..\gradlew clean build generateRelease
cd ..

And then upload and publish.