Unity iOS/Android 공유 플러그인 C++ 라이브러리 만들기

7704 단어 AndroidiOSC++
■ DLLImport의 DLL 이름 고려 사항
매우 부합되는 것은 아래의 방법을 참고하면 해결할 수 있다
라이브러리 이름은 libhello입니다.so라면 DLLImport에 lib 및 를 설정합니다.so를 제외한 부분을 설정합니다.
  http://qiita.com/hibiki29/items/527544abccc07563e7a7
이 페이지에 따라 AndroidNDK 설치
  http://dench.flatlib.jp/opengl/androidsdk
■ Android NDK의 설치
아래에서 NDK 아카이브를 다운로드하십시오.
http://developer.android.com/tools/sdk/ndk/index.html
NDKr8e에서 64bit OS 버전을 선택할 수 있습니다.
예를 들어 Windows x64에서 개발된 경우android-ndk-r10e-windows-x8664.exe 다운로드.(자주 업데이트되므로 버전 번호를 새 버전으로 바꾸십시오)
자동 압축 해제 형식이기 때문에 실행 후 임의의 폴더로 확장됩니다.
해동 방법
Windows의 경우 exe를 직접 실행합니다.
Linux/Mac OS X의 경우 실행 속성을 추가한 후 명령줄에서 실행됩니다.
chmod 700 android-ndk-r10e-linux-x86_64.bin
./android-ndk-r10e-linux-x86_64.bin
전개 위치는 설명에서 C:\android\android-ndk-r10e로 가정합니다.
환경 변수의 PATH에도 NDK 폴더를 추가합니다.
예: C:\android\andk-r10e 추가
■AndroidNDK
  http://developer.android.com/tools/sdk/ndk/index.html
■ 다음 페이지의 내용을 완전히 표절해 보자
링크가 다운되었습니다. 캐시에서 가져오십시오.
http://webcache.googleusercontent.com/search?q=cache:zQ5sVulM7OYJ:devops.vccorp.net/blog/2015041701/+&cd=1&hl=ja&ct=clnk&gl=jp
Unity에 안드로이드, iOS에 해당하는 C++ 플러그인 설치
개시하다
Unity에서 C 언어(C++)를 플러그인으로 만든 정적 라이브러리를 호출할 수 있습니다.
이번에는 안드로이드, iOS 공통 코드로 제작된 프로그램 라이브러리를 소개한다.
전제 조건
Unity 5.0.1 Personal Edition
개발 환경: Mac OS
Xcode
Andorid SDK, NDK
실기에서 실행(Unity Pro 버전도 시뮬레이터를 통해 수행할 수 있음 ※ 1)
※ 1 iOS는 약간의 노력이 필요합니다.참고 자료
여기서부터 자기 것도 개량이 섞여있어요.
■ 폴더, 파일 구성은 최종적으로 다음과 같다.
Assets
|-------Plugins
|      |------PliginTest.cs
|      |
|      |------iOS
|      |------Android
|      |------src
|          |------helloworld
|                 |-------Android.mk
|                 |-------Application.mk
|                 |-------build_plugin.sh
|                 |-------hello.cpp
|                 |-------hello.h
|                 |-------helloworld.xcodeproj
|                 |-------helloworldTests
|                        |---------Info.plist
|
|-------Scripts
|------PluginCall.cs

Xcode를 시작하려면 다음 Cocoa Touch Static Library 를 선택하십시오.



Helloworld 프로젝트 만들기 입력



helloworld.m helloworld.hhello 삭제cpp hello.만들다




hello.cpp hello.아래와 같다.


■ANDROID_LOG_DEBUG 사용 시*.mk 파일을 포함하려면 다음과 같은 설정이 필요합니다
http://gjtwiki.wiki.fc2.com/wiki/NDK%2FDDMS%E3%81%AELog%E3%81%AB%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
●hello.cpp
#include "hello.h"
#include <stdio.h>

#ifdef __ANDROID__
#include <android/log.h>
#endif

int test(){
#ifdef __ANDROID__
    __android_log_write(ANDROID_LOG_DEBUG, "hello.cpp", "Hello,World!");
#else
    printf("Hello,World!\n");
#endif
    return 0;
}
●hello.h
#ifndef __hello__hello__
#define __hello__hello__

extern "C" {
    int test();
}

#endif /* defined(__hello__hello__) */

iOS 측면 설정


■ Plugin/iOS에서 라이브러리 만들려면 Xcode 설정
아래와 같다.
Per-configuration Build Products Path = ../../iOS
Build Active Architecture Only -> Release = Yes
iOS Deployment Target = iOS 5.0

장치를 연결하고 구축한 다음 iOS 폴더 아래에 있는 libhelloworld.놓다

안드로이드 설정


■ANDROID_NDK_ROOT에서 AndroidNDK 경로를 설정합니다.
●Android.mk
include $(CLEAR_VARS)

LOCAL_ARM_MODE  := arm
LOCAL_PATH      := $(NDK_PROJECT_PATH)
LOCAL_MODULE    := libhello
LOCAL_CFLAGS    := -Werror
LOCAL_SRC_FILES := hello.cpp
LOCAL_LDLIBS    := -llog

include $(BUILD_SHARED_LIBRARY)
●Application.mk
■stl 사용 시 다음과 같은 선언이 필요하다
APP_STL := gnustl_static
APP_OPTIM        := release
APP_ABI          := armeabi
APP_PLATFORM     := android-8
APP_BUILD_SCRIPT := Android.mk
APP_STL := gnustl_static
●build_plugin.sh
ANDROID_NDK_ROOT=AndroidNDKのあるフォルダのパス

$ANDROID_NDK_ROOT/ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk $*
mv libs/armeabi/libhello.so ../../Android/

rm -rf libs
rm -rf obj
■build_plugin.터미널에서sh가 있는 경로로 이동하려면 아래 명령을 입력하십시오
명령:shbuildplugin.sh
아래와 같다.하면, 만약, 만약...
[armeabi] Compile++ arm : hello <= hello.cpp
[armeabi] StaticLibrary : libstdc++.a
[armeabi] SharedLibrary : libhello.so
[armeabi] Install : libhello.so => libs/armeabi/libhello.so

Unity 측면


Canvas 및 Buton을 클릭한 후 Oncliccked Buton을 미리 호출합니다().
■PluginCall.cs
using UnityEngine;
using System.Collections;

public class PluginCall : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    public void OnClickedButton(){
        Debug.Log("OnClickedButton");
        PliginTest.helloTest ();

    }
}
■PliginTest.cs
using UnityEngine;
using System.Runtime.InteropServices;

public class PliginTest {

    #if UNITY_IPHONE || UNITY_XBOX360
    [DllImport ("__Internal")]
    #else
    [DllImport ("hello")]
    #endif

    private static extern int test ();

    public static int helloTest() {
        return test ();
    }
}
■ Inspector에서 Any Plaatform을 선택한 다음 Apply 선택
(이렇게 하지 않으면 경고가 온다.)

■ 그리고... 드디어 건물이야... 정말 고생했어...
■ X코드의 로그와 안드로이드 스튜디오의 Logicat을 보고 Hello, World가 표시되는지 확인
● Android Studio 로그
 
● xCode 로그

좋은 웹페이지 즐겨찾기