Setting up EasyAR Android SDK

This article shows how to setup EasyAR non-Unity Android projects using EasyAR package.

If you want to use EasyAR unity package, please read this for setup and this for samples.

If you want to run EasyAR non-Unity Android sample, please read this instead.

Pre-Requirements

  • JDK 1.7 or later

  • Android NDK

  • Android SDK with Build Tools at least version 20.0.0

It is recommended to install the latest version of NDK and SDK

You can use EasyAR in Eclipse or Android Studio. For simple configuration, we suggest to use Android Studio 1.5 as we did in samples.

Note: EasyAR do not support Java only API for now, you have to program both Java code and C++ code to make EasyAR work. You can reference the samples to do so. It is relatively simple to use EasyAR C++ classes, you do not have to worry about pointers and memory management. We will add Java API support in future releases.

To use EasyAR in Android Studio 1.5 like the samples, you may also need the followings

  • JDK 1.7 or later

  • Android Studio 1.5 or later

  • Android NDK r10e

  • Android SDK with Build Tools at least version 20.0.0

  • Android API 23 (download from Android SDK Manager)

Note: EasyAR SDK do support building from Android Studio 1.4 or below, or from Eclipse. We choose Android Studio 1.5 for sample creation because it is the best tool for now that offers a simple way to configure and debug Android Java code and C++ code together.

Import EasyAR Android SDK

This step is different in Eclipse and Android Studio, and you may need to write Android.mk in some tools. Here we will introduce the configuration details when using Android Studio 1.5.

First you have to change your build.gradle according to this official article.

After above change, you can now add EasyAR specific configurations

Add EasyAR native include directories

model {
    android.ndk {
        cppFlags.add("-I${file("/path/to/EasyARSDK/package/include")}".toString())
    }
}

You may also want to add some common native configurations

model {
    android.ndk {
        cppFlags.add("-DANDROID")
        cppFlags.add("-fexceptions")
        cppFlags.add("-frtti")
        stl = "gnustl_static"
        ldLibs.add("log")
        ldLibs.add("GLESv2")
    }
}

Add EasyAR native library dependencies

model {
    android.sources {
        main {
            jni {
                dependencies {
                    library file("/path/to/EasyARSDK/package/Android/libs/armeabi-v7a/libEasyAR.so") abi "armeabi-v7a"
                }
            }
        }
    }
}

Add EasyAR Java library dependencies

dependencies {
    compile fileTree(include: ['*.jar'], dir: '/path/to/EasyARSDK/package/Android/libs')
}

Finially you may have a build.gradle like this

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"
        defaultConfig.with {
            applicationId = "cn.easyar.samples.helloar"
            minSdkVersion.apiLevel  =15
            targetSdkVersion.apiLevel = 22
            versionCode = 1
            versionName = "1.0"
        }
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles.add(file("proguard-rules.pro"))
        }
    }
    android.ndk {
        moduleName = "HelloARNative"
        cppFlags.add("-I${file("../../../package/include")}".toString())
        cppFlags.add("-DANDROID")
        cppFlags.add("-fexceptions")
        cppFlags.add("-frtti")
        stl = "gnustl_static"
        ldLibs.add("log")
        ldLibs.add("GLESv2")
    }
    android.productFlavors {
        create("arm") {
            ndk.with {
                abiFilters.add("armeabi-v7a")
            }
        }
    }
    android.sources {
        main {
            jni {
                dependencies {
                    library file("../../../package/Android/libs/armeabi-v7a/libEasyAR.so") abi "armeabi-v7a"
                }
            }
        }
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: '../../../package/Android/libs')
}

If you are using Eclipse or Android Studio 1.4 or bellow, you may need to write Android.mk. You can find relative settings like above.

Add Permissions in AndroidManifest

EasyAR require the following permissions, missing permissions may cause initialize fail.

android.permission.CAMERA

android.permission.INTERNET

Add them to AndroidManifest like this.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.easyar.samples.helloar" >
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

Initialize EasyAR

Use EasyAR.initialize to initialize EasyAR. You can add the initialize into your activity like this.

protected void onCreate() {
    EasyAR.initialize(this, key);
}

Other Code

The reset is to write EasyAR logics and other code. Both Java code and C++ code are needed. You can reference EasyAR samples for more details.