필요한 것들

- 안드로이드 개발환경, 유니티

안드로이드 스튜디오(기준으로 설명) 혹은 안드로이드를 개발가능한 이클립스






- 안드로이드 스튜디오를 이용하여 프로젝트를 생성한다

blank로 하던 Add No Activity로 하던 안에 있는거 다 삭제

res 안에 것들


- .java 파일을 하나 만든다

package stars.com.starsplugin;

AndroidManager.cs


Plugin.java



import android.util.Log;
import com.unity3d.player.UnityPlayer;

public class Plugin {
private static Plugin _plugin = null;
private Plugin() {

}
public static Plugin getInstance() {
if (_plugin == null) {
_plugin = new Plugin();
}
return _plugin;
}

public void CallAndroid(String msg)
{
Log.d("MYTEST", "CallAndroid");
String message = msg + "(by CallAndroid)";
UnityPlayer.UnitySendMessage("AndroidManager", "SetLog", message);
}
}

이대로라면 import가 되지 않았다며 빨간줄이 뜰 것이므로


- classes.jar 설정

 C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin\classes.jar

복사

C:\Users\Administrator\AndroidStudioProjects\project\app\libs


Open Module Settings -> Dependencies -> File dependency -> libs/classes.jar 추가







- Gradle 설정

Gradle Scripts -> build.gradle(Module:app) 열기

아래와 같이 수정


apply plugin: 'com.android.library' // application -> library

android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

defaultConfig {
// applicationId "com."
minSdkVersion 15
targetSdkVersion 22
// versionCode 1
// versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
compile files('libs/classes.jar')
}

//task to delete the old jar
task deleteOldJar(type: Delete) {
delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
from('build/intermediates/bundles/release/')
into('release/')
include('classes.jar')
///Rename the jar
rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

- Make Module App (Ctrl + Shift + F9) 를 실행한다


- 안드로이드 스튜디오의 오른쪽에 보면 Gradle Project가 있다.

Project -> :app -> Tasks -> other -> exportJar을 Run 한다.



- C:\Users\Administrator\AndroidStudioProjects\StarsPlugin\app\release 폴더에 가면

AndroidPlugin.jar 파일이 생긴다.

- UnityProject의 Assets\Plugins\Android 폴더로 옮긴다.




- 유니티 스크립트에서 


public void CallJavaFunc(string strFuncName, string strTemp)

{ using (AndroidJavaClass cls = new AndroidJavaClass("stars.com.starsplugin.Plugin")) {   using (AndroidJavaObject stars = cls.CallStatic<AndroidJavaObject>("getInstance"))

  {

    stars.Call(strFuncName, strTemp);

  }

} }

public void SetLog(string strJavaLog) { Debug.Log("message from java: " + strJavaLog); GameObject.Find("GameManager").GetComponent<debug>().strLog = strJavaLog; strLog = strJavaLog; }

- 유니티의 함수를 호출하기 위해 유니티에서 Empty Object를 생성하고




GameObject이름을 동일하게 해준다. UnityPlayer.UnitySendMessage("AndroidManager", "SetLog", message);

UnitySendMessage의 정의는 UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");



함수가 있는 스크립트를 추가해줌





잘나온다




- 끗

무슨 NativePlayer니 어쩌니 그딴거 쓸일이 뭐가있나 삽질..


첨부파일 참고


참고 사이트 : http://answers.unity3d.com/questions/437708/jni-exception-using-android-plugin.html

http://docs.unity3d.com/Manual/PluginsForAndroid.html

http://blog.naver.com/bluefallsky/220110061131

gradle 파일 참고 : http://egloos.zum.com/dra784/v/11168585


'프로그래밍 > C#' 카테고리의 다른 글

[C# Parser] NRefactory  (0) 2015.11.03
[Error] ClickOnce error  (0) 2014.11.21
FTP with .NET (C#)  (0) 2014.10.21
by 개발자가 되자! 2015. 9. 29. 20:37
| 1 2 3 4 5 6 7 ··· 51 |