unity在Android端開發的時候,免不了要調用Java;Unity可以通過兩種方式來調用Android:一是調用jar、二是調用aar。
這篇文章主要講解怎么從無到有的生成一個jar包,然后unity怎么調用jar。
一、通過Android studio生成jar包。
首先,在Android studio上面新建一個工程。
選擇你要發布的Android 版本,注意:要和unity保持一致。
選擇empty activity
默認的activity name不用動,直接點finish
找到unity的安裝路徑D:\****\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
復制class.jar到Android studio\Project\app\libs
在Android studio的file 找到Project Structure... 點擊
接下來找到app,找到dependdencies,點擊右邊的+號,選擇第二個 2 file dependency
找到 libs下剛導進去的class.jar, 點擊OK
接下來就是在MainActivity里編寫接口了
將MainActivity繼承UnityPlayerActivity,然后刪掉setContentView(R.layout.activity_main); 如果不繼承UnityPlayerActivity也是可以的,
類似這樣
或者這樣
選擇其中的一種編寫來接口
package com.hello.world; import android.os.Bundle; import android.util.Log; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } //接口 public String test() { Log.v("測試","成功"); return "測試成功"; } }
在AndroidManifest.XML中添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
OK,目前為止准備工作已經完成了,接下來該打jar包了
打開app的build.gradle
將apply plugin: 'com.android.application' 改為apply plugin: 'com.android.library' 刪掉 defaultConfig 下的 applicationId "com.hello.world"
在下面添加如下代碼
task makeJar(type: Copy) { delete 'build/libs/unitylib.jar' from('build/intermediates/bundles/release/') into('build/libs/') include('classes.jar') rename('classes.jar', 'unitylib.jar') } makeJar.dependsOn(build)
打開Terminal 輸入gradlew makeJar 然后敲回車
我之前更新Android SDK的時候更改過路徑,就會報錯: Could not find tools.jar. Please check that D:\AndroidStudio\MyJDK\MyJava cont
解決的方法是在gradle.properties中配置一下路徑就OK了:org.gradle.java.home=D:\\AndroidStudio\\MyJDK\\JDk
顯示這樣就說明jar打包成功了
打好的jar包就在app/build/libs下
二、unity調用jar包
新建一個工程,將unity切換到Android平台,點擊player Setting
將unity的包名和Android的版本設置的和jar包的一樣
擴展:unity和調Android有兩種方法:
一種是通過AndroidJavaClass類,建立在AndroidJNIHelper的基礎上
一種是通過AndroidJavaObject類,建立在AndroidJNI的基礎上,是AndroidJavaClass的父類
在這里我們通過AndroidJavaObject來調用,簡單。還有一個原因,通過AndroidJavaClass調用時,打包的時候光報錯,搞了兩天也沒解決bug, 心中萬匹草泥馬奔騰而過,所以果斷放棄了這個方法,有興趣的同學可以研究一下,回頭教教我。
我們繼續
在assets先創建Plugins/Android,主要名字別寫錯了,在Android studio中找到jar包,把它放在Android文件夾下,
添加腳本test,保存場景為test
在test腳本里添加如下代碼
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class Test : MonoBehaviour { 6 7 void OnGUI() 8 { 9 //方法一 10 try { 11 var javaClass = new AndroidJavaObject("com.hello.world.MainActivity"); 12 string value1=javaClass.Call<string>("test"); 13 GUI.Label (new Rect(10,10,500,500),value1); 14 } catch (System.Exception ex) { 15 GUI.Label (new Rect(10,10,500,500),ex.ToString()); 16 } 17 //方法二 18 try { 19 AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); 20 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity"); 21 string value2=jo.Call<string> ("test"); 22 GUI.Label(new Rect(20,20,500,500),value2); 23 } catch (System.Exception ex) { 24 GUI.Label (new Rect(20,20,500,500),ex.ToString()); 25 } 26 27 } 28 }
打包場景,搞定。
Android模擬器運行結果:
如果你按我上面的步驟進行的,或者看其他人寫的教程,Unity在Build時都一樣報錯,那么恭喜你,你將終結這個噩夢。
1、找到Android studio工程里的values/styles.xml
2、打開后是這樣子的
3、同志們,重點來了,簡單粗暴一點,將styles.xml里的東西統統刪掉,只留下如下內容
OK了,重新生成jar包,然后放心的扔到Unity了Build去吧,絕對不會再有問題了。
求關注啊,同志們