配置EasyAR Android SDK(非Unity)

这篇文章介绍如何使用EasyAR package配置EasyAR非Unity的Android工程。

如果你需要使用EasyAR Unity package,请阅读 这篇文章 了解使用package的配置,或 这篇文章 了解Unity样例的使用。

如果你需要运行EasyAR非Unity的Android样例,请阅读 这篇文章

EasyAR支持在Eclipse以及Android Studio 1.x 或 2.x版本中运行,以下配置适用于Android Studio 1.5及以上版本。

安装需求

  • JDK 1.7 或更新版本

  • Android NDK

  • Android SDK with Build Tools 至少需要版本20.0.0

推荐安装最新版本的NDK和SDK

你可以在Eclipse或Android Studio中使用EasyAR。我们建议和样例中一样使用Android Studio 1.5,这样配置最为简单。

注意:EasyAR目前不支持纯Java 的API,你需要同时编写Java 和C++ 代码来使用EasyAR 。可以参考样例中的实现。使用EasyAR C++类是相对简单的,可以不需要担心指针和内存管理问题。我们会在今后的版本中加入这个接口。

如果要像样例中一样在Android Studio 1.5中使用EasyAR,你需要如下配置

  • JDK 1.7 或更新版本

  • Android Studio 1.5 或更新版本

  • Android NDK r10e

  • Android SDK with Build Tools 至少需要版本20.0.0

  • Android API 23 (可从Android SDK Manager中下载)

注意:EasyAR SDK 是支持在Android Studio 1.4 和以下版本,以及Eclipse中引用和编译的。我们选择Android Studio 1.5 作为样例创建工具的原因是,对于同时支持Android Java代码和C++代码的集成配置和调试,它是目前最简单,设置最少的工具。

导入EasyAR Android SDK

在Eclipse和Android Studio中导入EasyAR会有不同,而且在某些工具中你可能会需要写Android.mk。这里我们会介绍在Android Studio 1.5中的配置细节。

首先你需要根据`这篇官方文档`_修改build.gradle。

在上面的修改之后,你可以添加EasyAR所需要的配置。

添加EasyAR native头文件路径

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

你可能也会希望配置这些常用的内容

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

添加EasyAR native library依赖

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

添加EasyAR Java library依赖

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

最后你会得到一个类似于这样的build.gradle

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')
}

如果你在使用Eclipse或Android Studio 1.4及以下版本,你可能会需要写Android.mk来编译C++代码。你可以参照上面的配置找到相关配置内容。

在AndroidManifest中添加权限

EasyAR需要以下这些权限,缺少权限将会导致初始化失败并黑屏。

android.permission.CAMERA

android.permission.INTERNET

将这些添加到AndroidManifest中。

<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>

初始化EasyAR

使用EasyAR.initialize来初始化EasyAR。你可以添加初始化函数到你的activity中如下,

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

其它代码

剩下的就是写EasyAR的逻辑以及其它代码。EasyAR同时需要Java和C++代码。你可以参考EasyAR的样例来实现。