diff --git a/examples/hellobaku/android/.gitignore b/examples/hellobaku/android/.gitignore
deleted file mode 100644
index d8b8329..0000000
--- a/examples/hellobaku/android/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-*.iml
-/.DS_Store
-/.gradle
-/.idea
-/build
-/captures
-/local.properties
diff --git a/examples/hellobaku/android/app/.gitignore b/examples/hellobaku/android/app/.gitignore
deleted file mode 100644
index 796b96d..0000000
--- a/examples/hellobaku/android/app/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/examples/hellobaku/android/app/build.gradle b/examples/hellobaku/android/app/build.gradle
deleted file mode 100644
index a2d4bca..0000000
--- a/examples/hellobaku/android/app/build.gradle
+++ /dev/null
@@ -1,39 +0,0 @@
-apply plugin: 'android-sdk-manager'
-apply plugin: 'com.android.application'
-apply plugin: 'me.tatarka.retrolambda'
-
-android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.1"
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
-    }
-    defaultConfig {
-        applicationId "io.v.baku.hellobaku"
-        minSdkVersion 21
-        targetSdkVersion 23
-        versionCode 1
-        versionName "1.0"
-    }
-    buildTypes {
-        debug {
-            multiDexEnabled true
-        }
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
-        }
-    }
-    packagingOptions {
-        exclude 'META-INF/LICENSE.txt'
-        exclude 'META-INF/NOTICE.txt'
-    }
-}
-
-dependencies {
-    compile 'io.v:baku-toolkit:0.9.0'
-    compile fileTree(dir: 'libs', include: ['*.jar'])
-    apk ('org.slf4j:slf4j-android:1.7.12')
-}
diff --git a/examples/hellobaku/android/app/proguard-rules.pro b/examples/hellobaku/android/app/proguard-rules.pro
deleted file mode 100644
index 25805d2..0000000
--- a/examples/hellobaku/android/app/proguard-rules.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /usr/local/google/home/rosswang/.android-sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
diff --git a/examples/hellobaku/android/app/src/androidTest/java/io/v/baku/hellobaku/ApplicationTest.java b/examples/hellobaku/android/app/src/androidTest/java/io/v/baku/hellobaku/ApplicationTest.java
deleted file mode 100644
index f3a5326..0000000
--- a/examples/hellobaku/android/app/src/androidTest/java/io/v/baku/hellobaku/ApplicationTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package io.v.baku.hellobaku;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
- *
- * <p>TODO(rosswang)
- */
-public class ApplicationTest extends ApplicationTestCase<Application> {
-    public ApplicationTest() {
-        super(Application.class);
-    }
-}
\ No newline at end of file
diff --git a/examples/hellobaku/android/app/src/main/AndroidManifest.xml b/examples/hellobaku/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index ad765e3..0000000
--- a/examples/hellobaku/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="io.v.baku.hellobaku" >
-
-    <application
-        android:allowBackup="true"
-        android:icon="@mipmap/ic_launcher"
-        android:label="@string/app_name"
-        android:theme="@style/AppTheme" >
-        <activity
-            android:name=".HelloActivity"
-            android:label="@string/app_name" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-        <activity
-            android:name=".HelloActivityOneWay"
-            android:label="@string/oneway_label" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-        <activity
-            android:name=".HelloActivityComposition"
-            android:label="@string/comp_label" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-        <activity
-            android:name=".HelloActivityALaCarte"
-            android:label="@string/alacarte_label" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-</manifest>
diff --git a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivity.java b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivity.java
deleted file mode 100644
index 5c5ae32..0000000
--- a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivity.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package io.v.baku.hellobaku;
-
-import android.os.Bundle;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import io.v.baku.toolkit.BakuActivity;
-
-public class HelloActivity extends BakuActivity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_hello);
-
-        final TextView txtOutput = (TextView) findViewById(R.id.displayTextView);
-        // Binds the Syncbase row named "message" to displayTextView, a.k.a. txtOutput.
-        dataBinder().forKey("message")
-                .bindTo(txtOutput);
-
-        final EditText txtInput = (EditText) findViewById(R.id.inputEditText);
-        findViewById(R.id.actionButton).setOnClickListener(bn -> {
-            // Setting the text on txtOutput will update the "message" Syncbase row via the data
-            // binding we established above.
-            txtOutput.setText(txtInput.getText());
-            txtInput.setText("");
-        });
-    }
-}
diff --git a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityALaCarte.java b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityALaCarte.java
deleted file mode 100644
index d86534a..0000000
--- a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityALaCarte.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package io.v.baku.hellobaku;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import io.v.baku.toolkit.VAndroidContextMixin;
-import io.v.baku.toolkit.VAndroidContextTrait;
-import io.v.baku.toolkit.bind.BindingBuilder;
-import io.v.rx.syncbase.RxAndroidSyncbase;
-import io.v.rx.syncbase.RxDb;
-import io.v.rx.syncbase.UserSyncgroup;
-import rx.Subscription;
-
-public class HelloActivityALaCarte extends Activity {
-    private RxAndroidSyncbase mSb;
-    private Subscription mActivityDataBindings;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_hello);
-
-        final VAndroidContextTrait<HelloActivityALaCarte> vActivity =
-                VAndroidContextMixin.withDefaults(this, savedInstanceState);
-
-        mSb = new RxAndroidSyncbase(vActivity);
-        // Operate on Syncbase io.v.baku.hellobaku/db/t
-        final RxDb db = mSb.rxApp(getPackageName()).rxDb("db");
-
-        final TextView txtOutput = (TextView) findViewById(R.id.displayTextView);
-
-        // We want this data binding to share the lifecycle of the Activity from onCreate to
-        // onDestroy, so keep track of its Subscription and unsubscribe in onDestroy.
-        final BindingBuilder builder = new BindingBuilder()
-                .activity(vActivity)
-                .rxTable(db.rxTable("t"));
-
-        mActivityDataBindings = builder.getAllBindings();
-
-        // Binds the Syncbase row named "message" to displayTextView, a.k.a. txtOutput.
-        builder.forKey("message")
-               .bindTo(txtOutput);
-
-        final EditText txtInput = (EditText) findViewById(R.id.inputEditText);
-        findViewById(R.id.actionButton).setOnClickListener(bn -> {
-            // Setting the text on txtOutput will update the "message" Syncbase row via the data
-            // binding we established above.
-            txtOutput.setText(txtInput.getText());
-            txtInput.setText("");
-        });
-
-        UserSyncgroup.builder()
-                .activity(vActivity)
-                .db(db)
-                .prefix("t")
-                .sgSuffix("myGlobalUserSyncgroup")
-                .buildCloud()
-                .join();
-    }
-
-    @Override
-    protected void onDestroy() {
-        mActivityDataBindings.unsubscribe();
-        mSb.close();
-        super.onDestroy();
-    }
-}
diff --git a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityComposition.java b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityComposition.java
deleted file mode 100644
index 773be5c..0000000
--- a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityComposition.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package io.v.baku.hellobaku;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import io.v.baku.toolkit.BakuActivityMixin;
-import io.v.baku.toolkit.BakuActivityTrait;
-
-public class HelloActivityComposition extends Activity {
-    private BakuActivityTrait<HelloActivityComposition> mBaku;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_hello);
-
-        mBaku = new BakuActivityMixin<>(this, savedInstanceState);
-
-        final TextView txtOutput = (TextView) findViewById(R.id.displayTextView);
-        // Binds the Syncbase row named "message" to displayTextView, a.k.a. txtOutput.
-        mBaku.dataBinder().forKey("message")
-                .bindTo(txtOutput);
-
-        final EditText txtInput = (EditText) findViewById(R.id.inputEditText);
-        findViewById(R.id.actionButton).setOnClickListener(bn -> {
-            // Setting the text on txtOutput will update the "message" Syncbase row via the data
-            // binding we established above.
-            txtOutput.setText(txtInput.getText());
-            txtInput.setText("");
-        });
-    }
-
-    @Override
-    protected void onDestroy() {
-        mBaku.close();
-        super.onDestroy();
-    }
-}
diff --git a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityOneWay.java b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityOneWay.java
deleted file mode 100644
index 0d2e52e..0000000
--- a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityOneWay.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package io.v.baku.hellobaku;
-
-import android.os.Bundle;
-import android.widget.EditText;
-
-import io.v.baku.toolkit.BakuActivity;
-
-/**
- * This example is similar to {@link HelloActivity} but uses a unidirectional rather than
- * bidirectional data binding to {@code displayTextView}, instead writing to Syncbase directly.
- */
-public class HelloActivityOneWay extends BakuActivity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_hello);
-
-        // Binds the Syncbase row named "message" to displayTextView, read-only
-        dataBinder().forKey("message")
-                .bindReadOnly(R.id.displayTextView);
-
-        final EditText txtInput = (EditText) findViewById(R.id.inputEditText);
-        findViewById(R.id.actionButton).setOnClickListener(bn -> {
-            // Writes the text of inputEditText to the Syncbase row named "message"
-            getSyncbaseTable().put("message", txtInput.getText().toString());
-
-            txtInput.setText("");
-        });
-    }
-}
diff --git a/examples/hellobaku/android/app/src/main/res/layout/activity_hello.xml b/examples/hellobaku/android/app/src/main/res/layout/activity_hello.xml
deleted file mode 100644
index a31ec2f..0000000
--- a/examples/hellobaku/android/app/src/main/res/layout/activity_hello.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context=".HelloActivity">
-
-    <TextView
-        android:id="@+id/displayTextView"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true" />
-
-    <EditText
-        android:id="@+id/inputEditText"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentStart="true"
-        android:layout_below="@+id/displayTextView"
-        android:layout_toStartOf="@+id/actionButton"
-        android:singleLine="true" />
-
-    <Button
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/bn_text"
-        android:id="@+id/actionButton"
-        android:layout_below="@+id/displayTextView"
-        android:layout_alignEnd="@+id/displayTextView" />
-</RelativeLayout>
diff --git a/examples/hellobaku/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/hellobaku/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 171203b..0000000
--- a/examples/hellobaku/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/examples/hellobaku/android/app/src/main/res/values-v21/styles.xml b/examples/hellobaku/android/app/src/main/res/values-v21/styles.xml
deleted file mode 100644
index 1899c99..0000000
--- a/examples/hellobaku/android/app/src/main/res/values-v21/styles.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
-        <item name="android:colorPrimary">@color/primary_material_dark</item>
-    </style>
-</resources>
diff --git a/examples/hellobaku/android/app/src/main/res/values/colors.xml b/examples/hellobaku/android/app/src/main/res/values/colors.xml
deleted file mode 100644
index 1a93b3d..0000000
--- a/examples/hellobaku/android/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <color name="primary_material_dark">#009688</color>
-</resources>
\ No newline at end of file
diff --git a/examples/hellobaku/android/app/src/main/res/values/dimens.xml b/examples/hellobaku/android/app/src/main/res/values/dimens.xml
deleted file mode 100644
index 47c8224..0000000
--- a/examples/hellobaku/android/app/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<resources>
-    <!-- Default screen margins, per the Android Design guidelines. -->
-    <dimen name="activity_horizontal_margin">16dp</dimen>
-    <dimen name="activity_vertical_margin">16dp</dimen>
-</resources>
diff --git a/examples/hellobaku/android/app/src/main/res/values/strings.xml b/examples/hellobaku/android/app/src/main/res/values/strings.xml
deleted file mode 100644
index 744d9f3..0000000
--- a/examples/hellobaku/android/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<resources>
-    <string name="app_name">Hello Baku</string>
-    <string name="oneway_label">Hello Baku - One-Way</string>
-    <string name="comp_label">Hello Baku - Composition</string>
-    <string name="alacarte_label">Hello Baku - À la Carte</string>
-    <string name="bn_text">Write</string>
-</resources>
diff --git a/examples/hellobaku/android/app/src/main/res/values/styles.xml b/examples/hellobaku/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index e0113a1..0000000
--- a/examples/hellobaku/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<resources>
-
-    <!-- Base application theme. -->
-    <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
-        <item name="android:colorPrimary">@color/primary_material_dark</item>
-    </style>
-
-</resources>
diff --git a/examples/hellobaku/android/build.gradle b/examples/hellobaku/android/build.gradle
deleted file mode 100644
index 4c4d164..0000000
--- a/examples/hellobaku/android/build.gradle
+++ /dev/null
@@ -1,28 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-    repositories {
-        jcenter()
-    }
-    dependencies {
-        classpath (
-                'com.android.tools.build:gradle:1.5.0',
-                'com.jakewharton.sdkmanager:gradle-plugin:0.12.0',
-                'me.tatarka:gradle-retrolambda:3.2.4'
-        )
-
-        // NOTE: Do not place your application dependencies here; they belong
-        // in the individual module build.gradle files
-    }
-}
-
-allprojects {
-    repositories {
-        mavenLocal()
-        jcenter()
-    }
-}
-
-task clean(type: Delete) {
-    delete rootProject.buildDir
-}
diff --git a/examples/hellobaku/android/gradle.properties b/examples/hellobaku/android/gradle.properties
deleted file mode 100644
index 1d3591c..0000000
--- a/examples/hellobaku/android/gradle.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-# Default value: -Xmx10248m -XX:MaxPermSize=256m
-# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
\ No newline at end of file
diff --git a/examples/hellobaku/android/gradle/wrapper/gradle-wrapper.jar b/examples/hellobaku/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 05ef575..0000000
--- a/examples/hellobaku/android/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/examples/hellobaku/android/gradle/wrapper/gradle-wrapper.properties b/examples/hellobaku/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index f23df6e..0000000
--- a/examples/hellobaku/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Wed Oct 21 11:34:03 PDT 2015
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
diff --git a/examples/hellobaku/android/gradlew b/examples/hellobaku/android/gradlew
deleted file mode 100755
index 9d82f78..0000000
--- a/examples/hellobaku/android/gradlew
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-esac
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/examples/hellobaku/android/gradlew.bat b/examples/hellobaku/android/gradlew.bat
deleted file mode 100644
index aec9973..0000000
--- a/examples/hellobaku/android/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/examples/hellobaku/android/settings.gradle b/examples/hellobaku/android/settings.gradle
deleted file mode 100644
index e7b4def..0000000
--- a/examples/hellobaku/android/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include ':app'
