1. 目標
1) Unity3D可調用Android Java函數(在.jar中)
2) Java可調用Unity3D函數
3) Unity3D可調用Android C函數(在.so中)
2. 測試環境
1) Unity5.0
2) JDK: jdk-8u25-windows-i586
3) Android SDK
4) Eclipse : adt-bundle-windows-x86中自帶的
3. 創建Java工程
第一步:
第二步:
第三步:
第四步: Configure Laucher Icon,不做任何修改,不要把你的Image File在這兒加入,它會強行修改Image File的尺寸,在后面把它直接放入res/drawable即可。
第五步:
第六步:Blank Activity采用默認值即可。
第七步:刪除下面紅色標記部分
注:若其基類不是Activity,則在左邊PlugInTest上點右鍵,然后選擇Properties,進入如下界面:
4. 修改Android工程
4.1 導入Unity5.0 classes.jar
C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\com\unity3d\player)
2) classes.jar位於:C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin,其導入方法如下圖所示:
4.2 替換Launcher Icon
把自己制作的ic_launcher.png覆蓋res/drawable-xxx目錄中的ic_launcher.png
4.3 修改MainActivity.java
- package com.example.plugintest;
- import android.app.Activity;
- import android.os.Bundle;
- import com.unity3d.player.UnityPlayerActivity;
- public class MainActivity extends UnityPlayerActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
- // only for test, C# in unity will call it
- public int GetInt(){
- return 1000;
- }
- }
4.4 把Android內容導出到Unity5.0
4.4.1 生成plugintest.jar
1) 進入PlugInTest的Properties中,並勾選“Is Library”
2) Project->Clean
3) Project->Build Project
4) 生成的plugintest.jar見bin目錄
4.4.2 把PlugInTest中內容放入Unity5.0
把以下內容都於Unity Project的“Assets\Plugins\Android”目錄中。
1)bin目錄下的plugintest.jar
2)bin目錄下的AndroidManifest.xml (可根據需要增加其它的Activity或權限)
3) 整個res目錄
其結果在Unity Project如下圖:
5. 修改Unity工程
5.1 修改Android 【Player Settings】
5.2 訪問Java接口
- using UnityEngine;
- using System.Collections;
- public class AndroidTest : MonoBehaviour {
- // Use this for initialization
- void Start () {
- }
- // Update is called once per frame
- void Update () {
- AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
- AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
- Debug.Log("*********JerryTest*********" + jo.Call<int>("GetInt"));
- }
- }
UnityEngine.AndroidJavaClass與java.lang.Class及其子類對應。
UnityEngine.AndroidJavaObject與java.lang.Object及其子類對應。
5.3 導出apk
File->Build Run
當導出apk時,可能遇到下面的問題:
Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.
需在AndroidManifest中增加一行:
- <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
全部AndroidManifest如下所示:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="cn.toltech.game.doubleboats"
- android:versionCode="1"
- android:versionName="1.0" >
- <supports-screens
- android:smallScreens="true"
- android:normalScreens="true"
- android:largeScreens="true"
- android:xlargeScreens="true"
- android:anyDensity="true"/>
- <uses-sdk
- android:minSdkVersion="14"
- android:targetSdkVersion="21" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@android:style/Theme.NoTitleBar">
- <activity
- android:name="com.example.plguintest.MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
- </activity>
- </application>
- </manifest>
6. Android Native Plug
對於Android平台(armv7,x86)的Native Plugin, lib*.so應放於以下目錄中:
1) X86平台: Assets/Plugins/Android/libs/x86/
2) armv7平台:Assets/Plugins/Android/libs/armeabi-v7a/