(五)Unity插件生成

1)新建空的AndroidStudio工程,但是新建過程時最小SDK版本要與unity一致,如下圖所示,本次操作均為api16

?

2)創建Library,如下圖所示,新建module,然后選擇Android Library。

新建模塊為UnityPlugin,如下圖所示,注意此時的PackageName后續用得到

4)引入unity的classes.jar

按下圖所示,找到Unity安裝目錄下的classes.jar文件,并放入上述工程中\unityplugin\libs下(即新建Module下的libs下)

?

選擇File-ProjectStructure,調出Project Structure界面,依次選擇unityplugin(上述建立的module)-Dependencies,然后點擊右側加號-Jar dependences,并選擇libs下引入的classes.jar,如下圖所示,確定引入。

?

5)添加插件代碼

在com.idea.unityplugin下新建類UnityPlugin

在類UnityPlugin(繼承UnityPlayerActivity )中添加如下代碼

package com.idea.unityplugin;import android.os.Bundle;
import android.widget.Toast;import com.unity3d.player.UnityPlayerActivity;public class UnityPlugin extends UnityPlayerActivity {@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);}// 傳入數據,并通過toast顯示public void ShowToast(final String message){runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();}});}// 返回一個字符串(靜態方法)public static String GetInformation(){return "Android Static Msg";}// 返回一個字符串(非靜態方法)public String GetInfo(){return "Android Msg";}
}

6)生成jar或者aar包

點擊build.gradle(此插件的gradle),添加如下代碼,操作如下圖所示。

task makeJar(type: Copy) {delete 'build/libs/unityplugin.jar'from('build/intermediates/bundles/release/')into('build/libs/')include('classes.jar')rename('classes.jar', 'unityplugin.jar')
}makeJar.dependsOn(build)

?點擊Terminal,輸入gradlew makeJar回車,等待執行結束即可,即可在\unityplugin\build\outputs\aar下目錄下找到.aar文件。

?

7)將6)中aar文件放入unity中Assets文件下Plugins\Android目錄下,同時新建AndroidManifest.xml文件,并添加如下內容

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.xxxx.androidplugin"android:versionCode="1"android:versionName="1.0"><applicationandroid:allowBackup="true"android:label="@string/app_name"android:supportsRtl="true"><activity android:name="com.XXXX.unityplugin.UnityPlugin"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

注意事項如下圖所示

8)調用代碼

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class CallAndroidMethod : MonoBehaviour
{public Button[] buttons;public Text text;private void ShowAndroidToast(){//text.text = "Toast ";using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){text.text = "Toast:";jo.Call("ShowToast", "Android Toast");}}//using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))//{//    text.text += " Toast1 ";//    using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("crrentActivity"))//    {//        text.text += " Toast2 ";//        //jo.Call("ShowToast", "Android Toast");//        jo.CallStatic<string>("GetInformation");//        text.text += " Toast3 ";//    }//}
    }private void GetInfomation(){string info = "";using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){text.text = "Static:";info = jo.CallStatic<string>("GetInformation");}}text.text += info;}private void GetInfo(){string info = "";using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){text.text = "Nonstatic:";info = jo.Call<string>("GetInfo");}}text.text += info;}// Use this for initializationvoid Start (){buttons[0].onClick.AddListener(ShowAndroidToast);buttons[1].onClick.AddListener(GetInfomation);buttons[2].onClick.AddListener(GetInfo);}
}

然后發布apk即可用了

出現問題:

1)CommandInvokationFailure: Gradle build failed.

解決:修改Build System為Internal

2)IOException:?Failed?to?Move?File?/?Directory?from?'Temp/StagingArea\android-libraries\app-debug\classes.jar'?to?'Temp/StagingArea\android-libraries\app-debug\libs\classes.jar'.

解決:將插件aar文件用解壓軟件打開(直接雙擊),并不解壓,然后刪除libs下的classed.jar即可。

參考文獻:

https://blog.csdn.net/qq_16763249/article/details/81876038(非MainActivity調用方法,純java類調用)

https://blog.csdn.net/qq_28775437/article/details/78605691?locationNum=3&fps=1(打包報錯問題匯總)

https://blog.csdn.net/qiu_zhongya/article/details/51419456(主要參考文獻_原文)

?

轉載于:https://www.cnblogs.com/llstart-new0201/p/9995022.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248976.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centeros7安裝mysql - 風中追風_lonely - 博客園

轉載自&#xff1a;https://www.linuxidc.com/Linux/2016-09/135288.htm 安裝之前先安裝基本環境&#xff1a;yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs 1、配置YUM源 在MySQL官網中下載YUM源rpm安裝包&#xff1a;http://dev.mysql.c…

失物招領平臺6

昨天做了什么&#xff1a;學習了復選框、列表視圖、網絡視圖&#xff0c;集體討論了登錄頁面的構思 今天準備做什么&#xff1a;繼續學習Android stdio&#xff0c;改善登錄頁面 遇到的問題&#xff1a;時間遠遠不夠。轉載于:https://www.cnblogs.com/sljslj/p/11056074.html

前后端交互json字符串

//將需要的參數轉成json字符串&#xff0c;然后用utf-8編碼 var obj encodeURIComponent(JSON.stringify(this.categories),"utf-8") //后臺將前臺的json字符串按照utf-8的格式解碼&#xff0c;然后進行轉換 RequestMapping(value "/updateMaterialDemoInfo.d…

CSS布局解決方案(終結版)

前端布局非常重要的一環就是頁面框架的搭建&#xff0c;也是最基礎的一環。在頁面框架的搭建之中&#xff0c;又有居中布局、多列布局以及全局布局&#xff0c;今天我們就來總結總結前端干貨中的CSS布局。 居中布局 水平居中 1&#xff09;使用inline-blocktext-align &…

個人作業7 第一階段SCRUM沖刺(七)

了解了一下云服務器&#xff0c;下載了阿里云。 然而搞了半天還是沒應用上這個云服務器..轉載于:https://www.cnblogs.com/jbwen/p/11071733.html

Dcloud HTML5 監聽藍牙設備 調用 原生安卓實現 - aspirant - 博客園

最近一直搞Dcloud &#xff0c;這是HTML5版本的開發&#xff0c;打包時候&#xff0c;可以打包成 apk 和ipa 分別運行在安卓和ios 機器上面&#xff0c; 但是這里面的資料很少&#xff0c;遇到問題&#xff0c;之后只能自己鉆研總結&#xff0c; 現在有這么一個需求&#xff…

NOIP2018游記

NOIP 2018 游記 又是一年 \(NOIP\) 呢...第二次參加了,希望這一次能不再擦線吧...畢竟我真的很想去 \(WC\) ,也很想去省選. 最后悔的事就是在初三了,恰逢直升,大好年華,停課學 \(OI\) ,但我竟然在某兩位 \(dalao\) 帶領下搓了一年 爐石 \(\& \: SC2\) &#xff1f;&#xf…

四葉草社交平臺——十天沖刺(5)

今天沒能安排好各種的任務&#xff0c;姑且拍了張照片就散了。 我的任務就是把登錄功能完成&#xff0c;先讓其他人把資源載入問題解決了&#xff0c;然后我再看看動態如何發送。 轉載于:https://www.cnblogs.com/limitCM/p/10925161.html

Django forms組件

校驗字段 模板文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form action"" method"post"><p>用戶名: <…

為什么要用TypeScript - 肉豬 - 博客園

為什么要用TypeScript 以下是本人的一點拙見&#xff0c;歡迎指正。 TypeScript的設計目的應該是解決JavaScript的“痛點”&#xff1a;弱類型和沒有命名空間&#xff0c;導致很難模塊化&#xff0c;不適合開發大型程序。另外它還提供了一些語法糖來幫助大家更方便地實踐面向…

java繼承上機作業

實現如下類之間的繼承關系&#xff0c;并編寫Music類來測試這些類。 1 package su;2 3 class Instrument{4 public void play() {5 System.out.println("彈奏樂器");6 }7 8 public void play2() {9 // TODO 自動生成的方法存根 10 …

自定義標簽的作用

1&#xff09;控制標簽體內容是否輸出 2&#xff09;控制標簽余下內容是否輸出 3&#xff09;控制重復輸出標簽體內容 4&#xff09;改變標簽體內容 5&#xff09;帶屬性的標簽 package com.loaderman.demo.a_tag;import java.io.IOException; import java.io.StringWriter;imp…

前端之模擬數據 - HackerVirus - 博客園

閱讀目錄 玩轉前端之模擬數據 回到目錄 玩轉前端之模擬數據 博客園主頁&#xff1a;http://www.cnblogs.com/handoing/ 是否還在為前端模擬數據頭疼&#xff1f; 是否還在為后端返回數據格式較多內心煩躁&#xff1f; 是否還想吸一支煙壓壓精&#xff1f; 看下去吧&#x…

Leetcode No.146 ****

運用你所掌握的數據結構&#xff0c;設計和實現一個 LRU (最近最少使用) 緩存機制。它應該支持以下操作&#xff1a; 獲取數據 get 和 寫入數據 put 。 獲取數據 get(key) - 如果密鑰 (key) 存在于緩存中&#xff0c;則獲取密鑰的值&#xff08;總是正數&#xff09;&#xff…

三元運算符運算(Day02)

三元運算符運算(Day02) 運算符&#xff1a;用來對常量或者變量連接的符號&#xff0c;稱為運算符。表達式&#xff1a;用運算符連接起來的整個式子成為表達式。比如&#xff1a;a10,1020運算符有以下五種&#xff1a;1、算術運算符2、賦值運算符3、關系運算符4、邏輯運算符5、三…

JS正則表達式驗證數字非常全 - 吾心無所 - 博客園

JS正則表達式驗證數字非常全 Js代碼 <script type"text/javascript"> function SubmitCk() { var reg /^([a-zA-Z0-9][_|\_|\.]?)*[a-zA-Z0-9]([a-zA-Z0-9][_|\_|\.]?)*[a-zA-Z0-9]\.[a-zA-Z]{2,3}$/; if (!reg.test($("#txtEmail").val())) {…

datagrid 的標題的內容不對應整齊

$(document).ready(function(){ var column "[[" "{title:工號,field:grantorCode,sortable:true,hidden:true,width:fixWidth(0)}," "{title:外出告知人,field:grantor,sortable:true,width:fixWidth(0.15)}," "{title:開始時間…

laravel 分頁

2.1 基于查詢構建器分頁 有多種方式實現分頁&#xff0c;最簡單的方式就是使用查詢構建器或Eloquent模型的paginate方法。該方法基于當前用戶查看頁自動設置合適的偏移&#xff08;offset&#xff09;和限制&#xff08;limit&#xff09;。默認情況下&#xff0c;當前頁通過HT…

Postfix常用命令和郵件隊列管理(queue)

本文主要介紹一下postfix的常用命令及郵件隊列的管理: Postfix有以下四種郵件隊列&#xff0c;均由管理隊列的進程統一進行管理&#xff1a; maildrop&#xff1a;本地郵件放置在maildrop中&#xff0c;同時也被拷貝到incoming中。 incoming&#xff1a;放置正在到達隊列或管理…

異步加載js文件并執行js方法:實現異步處理網頁的復雜效果

異步加載js文件并執行js方法&#xff1a;實現異步處理網頁的復雜效果 有這么一個場景&#xff0c;當你的網頁頁面效果過多就會造成了打開頁面的速度變得緩慢&#xff0c;長時間處于加載的狀態&#xff0c;這樣的效果通常會讓用戶感到不友好&#xff0c;通常的處理方法是先…