xlab/android-go

Update examples to match new build system

Opened this issue · 4 comments

The new build system (the gradle stuff) is actually relatively nice (although it took me a whole day to figure out all of the details) and removes the need for the android tool.

I don't have time to update the examples right now and would also like to reduce some of the ridiculous boilerplate before that. I'll just document the most interesting ingredients here for later/others. I'll have more time in a couple of weeks.
It may be possible to shorten this a bit, but this is the conventional setup. The root (build) folder should contain these files for packing a .so into an apk with a native activity:

/build.gradle - top level build file (boilerplate)
/setting.gradle - this where the actual build file is includes (boilerplate)
/gradlew (boilerplate to make this work on independent of systems gradle version)
/gradle (boilerplate to make this work on independent of systems gradle version)
/app/build.gradle - actual build file
/app/src/main/AndroidManifest.xml
/app/src/main/jniLibs/armeabi-v7a/libexample.so - put the compiled go library here
/app/src/main/assets - put assets here

Running gradle(w) build will produce an apk.

build.gradle

buildscript {
    repositories {
       jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

/settings.gradle

include ':app'

/app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion = 24
    buildToolsVersion = '25.0.0'

    defaultConfig {
        applicationId = 'com.example.native_activity'
        minSdkVersion 24
        targetSdkVersion  24
        ndk {
            abiFilters 'armeabi-v7a'
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            jniDebuggable true
        }
    }
}
xlab commented

This is an amazing contribution, dude!
The build process haunted me for so long, especially in the light of recent NDK updates..

I will try to find hours as well to re-organise all examples. They are mostly boiler-plate all along.

The build process haunted me for so long, especially in the light of recent NDK updates..

Yep :-), me too, coming up with this was not fun. I wish the official docs were better for the "I can compile on my own, just make an apk already" case.

xlab commented

Reopening as examples need some care from me.

I'm updating example-egl to gradle here. I switch to Gradle build system as a entry point (because currently this is default Android build system). Currently first version works and I was able to build and deploy example-egl by single command: gradle installDebug

I'm planning to improve multi-arch support (arm and x86 for example) and refactor my .sh scripts. After what I'll open PR.