Unity調用Android的兩種方式:其一、調用jar包


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去吧,絕對不會再有問題了。

求關注啊,同志們


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM