2016年3月31日 星期四

Android Vuforia AR 範例:Core Features


一、下載 SDK 與 Sample 和註冊會員

1. 至 Vufroia Developer Portal 下載 Vuforia 5.5 SDK 和 Samples - Core Features for Android 範例

  • https://developer.vuforia.com/
  • https://developer.vuforia.com/downloads/samples
2. 登入或註冊 Vuforia 帳號
3. 進入 Develop 分頁,裡面有兩項目:
  • License Manager:
    • 管理 License,一個 License 可以多款 app 使用,但掃描次數皆累積於共用的那一個 License.
    • License 分級:
      • Starter:屬於免費使用。可以建立 Target 庫和下載掃描,但在雲端掃描上有次數限制(每個月最高上限) 和 會出現 Vuforia 無水印.
      • Classic:一次型付費。無法雲端掃描,但可移除浮水印.
      • Cloud:月費型付費。可雲端掃描且可移除浮水印,但雲端掃描量(每個月最高上限)有收費分級制.

  • Target Manager:
    • 管理 Target,可以建立多個 Database 存放不同的辨識物,透過上傳辨識物可判斷該辨識物的可辨識度(星數越高越好辨識),辨識物可以放 Vuforia 端進行 Cloud Reco 判斷或是下載至裝置內存判斷.兩著差別在於 Cloud 有數量計數收費標準,而下載則不用.

License Manager

Target Manager


二、開啟和執行 Samples - Core Features 

  1. 解壓縮下載的 SDK 檔案後,可以看到裡面有的檔案資料夾路徑:
    • 參考 readme.txt 所描述的結構說明
    • vuforia-sdk-android-5-5-9 \
      • assets \                                            Additional assets required to use Vuforia SDK
        • frame-markers-transparent \
      • build \                                              Vuforia SDK
        • include \                                Commented header files
        • java \                                     Precompiled Java classes
          • vuforia \
            • Vuforia.jar
        • lib \                                        Dynamic link libraries
          • armeabi-v7a \
            • libVuforia.so
      • licenses \                                        License Agreements
        • license_3rdpartynotice.txt
      • samples \                                        Destination folder for sample applications
        • readme.txt                                              
  2.  Android Studio 開啟 VuforiaSample,並在專案中加入下列三項:

    1. Vuforia.jar:專案中建立 libs 資料夾,並將 .jar 放入其中和 Add Library
    2. libVuforia.so:專案中建立 jniLibs,並將 armeabi-v7a 資料夾和 libVuforia.so 加入
    3. license key:將官網 License Manager 中,所建立的 Key 複製並加入程式中.








  3. 在 SampleApplicationSession.java 的 InitVuforiaTask 中,找到 Vuforia.setInitParameters() 方法:
    Vuforia.setInitParameters(
            Activity activity,
            int flags,
            "your Key"
    )




  4. 完成以上步驟後,build and run 在自己的手機裝置上進行測試:
    在此以 ImageTargets 選單項目進行































Android NDK 環境安裝 for mac



1. 至官方網站下載 ndk,並解壓縮至自訂資料夾

官方網址:http://developer.android.com/intl/zh-tw/ndk/downloads/index.html
舉例路徑:Users/Peter/DevelopKit/NDK/



2.  打開 Terminal 命令终端,建立 bash_profile 


  • 一. 输入 pico .bash_profile 
  • 二. export NDK_ROOT=/Applications/Android-NDK/android-ndk-r10e 
  • 三. export PATH=$PATH:$NDK_ROOT 
  • 四. 最後儲存( control+X) 選 Y 



3. 設定 Android Studio 外部工具:Android Studio → Preferences... → External Tools


-------------------------
新增 NDK Build
-------------------------
Name: NDK Build
Group: NDK
Description: NDK Build
Options: 全打勾
Show in: 全打勾
Tools Settings:
Program: NDK目錄/ndk-build
Parameters: NDK_PROJECT_PATH=$ModuleFileDir$/build/intermediates/ndk NDK_LIBS_OUT=$ModuleFileDir$/src/main/jniLibs NDK_APPLICATION_MK=$ModuleFileDir$/src/main/jni/Application.mk APP_BUILD_SCRIPT=$ModuleFileDir$/src/main/jni/Android.mk V=1
Working directory: $SourcepathEntry$

-------------------------新增 Javah-------------------------
Name: Javah
Group: NDK
Description: Javah
Options: 全打勾
Show in: 全打勾
Tools Settings:
Program: /usr/bin/javah (用 which javah 查詢目錄)
Parameters: -v -jni -d $ModuleFileDir$/src/main/jni $FileClass$
Working directory: $SourcepathEntry$


4.建立 MyHelloJni 專案

  1. Android Studio -> New Project : MyHelloJni
  2. local.properties 增加:ndk.dir = NDK安裝目錄
  3. build.gradle 增加:ndk {moduleName "JniTest"}
  4. gradle.properties 增加:android.useDeprecatedNdk = true
  5. MainActivity.java 加入 LoadLibrary 和 Library 中的 c method :
  6. 右鍵新增 jni Folder ,並在裡面新增 Android.mk、Application.mk、JniTest.c 檔案
    ----------------------
    Android.mk
    ----------------------
    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE := JniTest
    LOCAL_SRC_FILES := JniTest.c

    include $(BUILD_SHARED_LIBRARY)

    ----------------------
    Application.mk
    ----------------------
    APP_ABI := all

    ----------------------
    JniTest.c
    ----------------------
    #include <jni.h>
    #include "project_peter_com_myhellojni_MainActivity.h"

    // JNICALL 呼叫自己專案的路徑方法,將 . 替換成 _ 
    JNIEXPORT jstring JNICALL Java_project_peter_com_myhellojni_MainActivity_getStringFromNative
            (JNIEnv *evn, jobject obj) {
        return (*evn)->NewStringUTF(evn,"Hello NDK demo");
    }

  7. 調用 javah 協助 JNI 相關檔案建置:對 MainActivityjava 右鍵 NDK (自定義 group) -> Javah.
    執行成功後,會在 jni 資料夾中自動產生 "路徑_ MainActivity.h"



  8. 使用 NDK Build 建置:對 JniTest.c 右鍵 NDK (自定義 group) -> NDK Build.
    執行成功後,會自動產生 jniLibs 資料以及各核心的 .so library


參考資料:

  • hAndroid筆記: Android Studio + NDK + JNI
    https://8085studio.wordpress.com/2015/04/25/android-studio-ndk-jni/
  •  Android 如何藉由JNI來使用C/C++程式?
  • https://magiclen.org/android-jni/