Unity iOS/Android 공유 플러그인 C++ 라이브러리 만들기
매우 부합되는 것은 아래의 방법을 참고하면 해결할 수 있다
라이브러리 이름은 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.mkinclude $(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_staticAPP_OPTIM := release
APP_ABI := armeabi
APP_PLATFORM := android-8
APP_BUILD_SCRIPT := Android.mk
APP_STL := gnustl_static
●build_plugin.shANDROID_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.csusing 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.csusing 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 로그
Reference
이 문제에 관하여(Unity iOS/Android 공유 플러그인 C++ 라이브러리 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/satotin/items/05fad323de3101f775d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
■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.shANDROID_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.csusing 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.csusing 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 로그
Reference
이 문제에 관하여(Unity iOS/Android 공유 플러그인 C++ 라이브러리 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/satotin/items/05fad323de3101f775d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 ();
}
}
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 ();
}
}
Reference
이 문제에 관하여(Unity iOS/Android 공유 플러그인 C++ 라이브러리 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/satotin/items/05fad323de3101f775d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)