Setting up EasyAR Sense for Android¶
This article shows how to setup EasyAR non-Unity Android projects using EasyAR package.
If you want to use EasyAR Sense Unity Plugin, please read EasyAR Sense Unity Plugin .
If you want to run EasyAR non-Unity Android sample, please read this instead.
Pre-Requirements¶
JDK 1.8 or later
Android NDK
Android SDK with Build Tools at least version 28.0.3
It is recommended to install the latest version of NDK and SDK
You can use EasyAR in Eclipse or Android Studio.
EasyAR Sense have both Java and C++ API, and support Kotlin, you can choose your favorite language.
Import EasyAR Sense for Android¶
Configuration may be different when using different IDEs. Here we will introduce the configuration details when using Android Studio 2.2 and later with gradle.
Using Java only API
Put EasyAR.aar to app/libs or explicitly specified folder in your gradle settings.
Using both Java and C++ API
Put EasyAR.jar to app/libs or explicitly specified folder in your gradle settings.
Put armeabi-v7a and/or arm64-v8a to app/src/main/jniLibs or explicitly specified folder in your gradle settings.
Put easyar folder from include to app/src/main/jni or explicitly specified folder in your Android.mk or CMakeLists.txt.
You can get more details about arm64-v8a support from About Android arm64-v8a.
Gradle Configuration for EasyAR Sense -- Java API¶
Nothing special.
Gradle Configuration for EasyAR Sense -- C++ API¶
You may reference Google official article for this.
Makefile / CMakeLists¶
Here we only describe how to write Android.mk, if you prefer CMake, you can reference Google official article.
prebuilt library
include $(CLEAR_VARS)
# make sure this path is available for libEasyAR.so
LOCAL_PATH := $(LOCAL_PATH_TOP)/../jniLibs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := EasyAR
LOCAL_SRC_FILES := libEasyAR.so
include $(PREBUILT_SHARED_LIBRARY)
link libEasyAR.so
GLESv2 is required.
LOCAL_LDLIBS += -lGLESv2
LOCAL_SHARED_LIBRARIES += EasyAR
External Native Build¶
android {
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
}
If you prefer CMake, you can reference Google official article.
Specify ABIs¶
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
If you need only one of armeabi-v7a or arm64-v8a, keep that one in the above.
Warning: Since August 1, 2019, Google Play Store requires that an application with armeabi-v7a be committed with support for arm64-v8a. (Support 64-bit architectures)
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 cn.easyar.Engine.initialize to initialize EasyAR. You can add the initialization into your activity like this.
protected void onCreate() {
Engine.initialize(this, key);
}
Other Code¶
What is left is to write EasyAR logics and other code. You can refer to EasyAR samples for more details.
260 character path limit on Windows¶
On Windows, if any file in the project (including temporary files generated in the build process) has a path of longer than 260 characters, Android Studio may fail the build. Reduce the directory path length to workaround this problem.
ARCore¶
If you use ARCore, please refer to its official documentation to configure AndroidManifest and build.gradle.
In spite of that, it is neccessary to call the following line before initialization of EasyAR.
System.loadLibrary("arcore_sdk_c");
Obfuscation¶
If obfuscation is to be applied to Java code, please exclude namespace cn.easyar. EasyAR Sense uses JNI to access Java classes by name, and will have undefined behavior when they are renamed.
If you use ProGuard, you can add
-keep class cn.easyar.** { *; }