unityandroidxml文件
㈠ 修改unity導出到安卓的activity
1、首先將Unity創建一個Android工程,例如我的工程名是:01_Unity_Message,如下是Project視圖下的目錄。
2、新建庫模塊——Android工程是由模塊組成的,每一個模塊可以創建一個應用,切換到Android視圖下可以看到每一個模塊。因為Unity與Android通信主要是調用了各自的方法,因此在Android工程中我們可以單獨新建一個模塊作為庫模塊,來負責與Unity的交互內容。
新建模塊操作:
點擊Finish按鈕,然後稍等片刻,就會創建出新的模塊,我們作為一個庫模塊來使用,如下圖:
3、將Unity的jar包(class.jar)導入到新建的庫模塊中,首先說明:
首先找到class.jar文件,它的路徑在Unity的安裝路徑下,例如我的是在:D:\Program Files (x86)\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes,然後會發現只有一個class.jar文件。
這里注意兩點:
(1)、這個路徑是新版的Unity下的路徑,以前版本的jar文件是在\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Release\下;
(2)、Unity路徑下有兩個class.jar文件的不同路徑,一個是在Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下,另一個是在D:\Program Files (x86)\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes下。Unity中我們使用的是C#腳本,最終運行在Android上是由於Mono進行轉換的,所以我們選用的jar文件是第一個路徑下的。如果使用的是il2cpp,就要選擇第二個路徑下的jar文件。
將jar包導入庫模塊的操作如下:
4、因為新建的庫模塊中沒有MainActivity.java,我們可以理解為啟動這個模塊的java類,例如在初始的app模塊中就有一個MainActivity.java。因此需要新建一個MainActivity.java的文件,並且調用Unity包中的基類,具體操作如下:
點擊Finish後,會在庫模塊的中創建出一個MainActivity的類
注意:生成MainActivity類後,會在res/layout下生成一個xml文件:main_layout.xml。這個文件是一個布局文件,
因為我們的庫模塊是為了跟Unity交互的,不需要界面布局,所以為了防止後面發生錯誤,這里刪除掉這個文件
注意:要修改AndroidMainfest.xml文件,
然後仿照初始的app模塊中的AndroidMainfest.xml文件,將裡面的<activity></activity>部分復制到庫模塊的AndroidMainfest.xml的相同位置。
然後需要修改一下MainActivity這個腳本
5、下面就是在Android中編寫Unity要調用的方法了,例如我這里只寫一個簡單的兩數求和的方法:
6、Build庫模塊,然後將生成的配置文件導入到Unity工程中,操作如下:
然後稍等片刻,編譯中....
然後在Project視圖下,找到編譯生成文件的所在目錄unity_exchange/build/intermediates/bundles/debug,右鍵後打開所在文件夾
然後把debug文件夾下的classes.jar文件移動到libs文件夾中,並且把libs文件夾中的class.jar文件替換掉。然後將debug文件夾下的libs文件夾、res文件夾、AndroidManifest.xml文件導入到Unity的Assets/Plugins/Android文件夾下(沒有這個文件夾需先創建)。
然後將三個文件移動到Unity的plugins/Android文件夾下。
7、創建Unity的C#腳本,並掛載到MainCanera上。為了在真機測試時能夠看到求和的結果,這里我使用的是UGUI的Text來顯示結果,同時通過Button的按鈕來觸發求和方法。如下圖。
以下是主要的腳本代碼。調用Android中的方法,並將求和結果顯示在(Text)界面上
將腳本掛載到MainCamera上
8、Unity編輯器不能運行與Android相關的操作,所以需要導出apk文件到真機上測試。
注意:導出前要修改PlayerSettings相關配置。因為從Android工程中導入了一個AndroidManifest文件,這個文件中有Android工程的相關配置,例如工程名稱、工程的包名、最低SDK版本、執行的Activity等等。因此我們要在Unity導出apk前修改一些相關配置,主要修改的是包名
最後是導出apk包到手機上或虛擬機上測試即可。
特別提醒:如果使用Android工程中初始的app模塊來與Unity交互,需要修改部分配置。build.gradle文件中,將applicationId刪除,然後將apply plugin後面的內容修改為"com.android.library"。
不建議大家使用初始的app模塊,而是新建一個專門作為交互的Library模塊。
㈡ unity android快速設置app icon
一:需求
unity 和 android 的設置app icon 的方法太麻煩 需要簡化操作 最好拖入即可
二:實現
1.我們在在Plugins/Android 下面 創建res文件夾
2.我們模仿 unity 打包是自動產生的 icon 文件夾 復制到res目錄下
3.創建好了後 我們把對應的icon 放入即可
ic_launcher 是方圖標 ic_launcher_round 是圓圖標
5我們打開Plugins/Android 下的LauncherManifest.xml文件
添加
android:icon="@mipmap/ic_launcher" 方圖標
android:roundIcon="@mipmap/ic_launcher_round" 圓圖標
6.然後用unity 進行打包 就會發現app icon 變了
㈢ unity工程是怎麼在android上運行的
首先我們要創建一個android項目 因為項目需要使用Unity提供的介面,所以需要將介面classes.jar引入至當前工程但中。介麵包的所在地,打開Finder->應用程序->Unity->點擊Unity圖標,滑鼠右鍵選擇「顯示包內容」->Contents->PlaybackEngines->AndroidPlayer->bin->classes.jar 。介麵包引入工程後,開始編寫JAVA代碼。 UnityTestActivity是主Activity,Unity程序一起動就會調用這個Activity,它是在AndroidManifest.xml中配置的。它需要繼承UnityPlayerActivity,然而它就是剛剛我們引入的classes.jar包中提供的介面類。UnityTestActivity對外提供了兩個方法介面,StartActivity0(String name) 方法與StartActivity1(String name)方法,這兩個方法是在Unity中使用C#腳本調用的,意思是調用後程序將打開一個新的Activity,參數name也是由C#腳本傳遞過來的,接著將傳遞的String參數繼續傳遞給新打開的Activity。 接下來就是設置xml文件和布局文件了。對於會android編程的同學就很熟悉了。 把寫好的java代碼發布成jar包。接下來就創建unity工程,Unity工程中文件夾的結構如下,Plugins->Android的名稱不能修改,必需保持一致。接著把Eclipse中Android的工程文件拷貝至這里,除了Android工程中的src文件夾,將其它文件夾全部拷貝至Plugins->Android文件夾中。最後在Plugins->Android文件夾中創建bin文件夾,然後將剛剛生成的.jar文件拷貝進來,jar的名稱可以隨便修改,但是jar包裡面必須是com->xys->你的class文件,否則運行程序後提示找不到類文件。 接下來就是如何在C#中調用android的方法的代碼了。 加入如下代碼。 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("StartActivity0","第一個Activity"); 先得到AndroidJavaClass,然後得到AndroidjavaObject就是當前Activity的對象,也就是我們在上面創建的主UnityTestActivity.JAVA。拿到它的對象後調用jo.Call()參數1表示調用UnityTestActivity.JAVA類中的方法名稱,參數2表示該方法傳遞過去的參數。如下圖所示:「第一個Activity」與「第二個Activit」就是我在C#中傳遞過去的字元串。 7 發布成android平台apk
㈣ 如何獲取Unity Plugins下的默認的android工程
Unity默認導出的是Android-Eclipse工程,畢竟Eclipse for Android開發在近一兩年才開始沒落,用戶量還是非常巨大的。
個人認為AndroidStudio非常好用,能輕易解決很多Eclipse解決不了或者很難解決的問題。
所以我將Unity導出的Andoid工程分為Eclipse和AndroidStudio兩部分。
不過我之後的相關內容都會使用AndroidStudio,希望依然使用Eclipse的同學盡快跟上~
本文主要講解Unity導出的Android-Studio工程的目錄結構。
話先說在前面,這篇文章和1、導出的Xcode工程 非常相似,我建議手游開發者將兩篇結合起來看~
同時,我建議大家完整閱讀姊妹篇2、導出的Android-Eclipse工程 ,以建立完整的流程認知體系。
我所用軟體的版本:
Unity 5.3.5f1
AndroidStudio 1.3.1
前導步驟
第一步,創建一個新的工程 Unity_Build_to_Android
第二步,創建以下文件
//為了演示原生Android的jar包
Plugins/Android/libs/Jar.jar
//為了演示原生Android調用jni所需要的.so文件
Plugins/Android/libs/x86/libnative.so
//為了演示原生Android調用jni所需要.so文件
Plugins/Android/libs/armeabi-v7a/libnative.so
//為了演示Unity中隨包只讀文件的去向
StreamingAssets/ALL_EmptyTxt.txt
第三步,保存一下場景,如下圖
第四步,打開PlayerSettings,修改Bundle Identifier(包名),Unity裡面不修改不讓導出Android的~
第五步,選擇Android平台,Export導出Android工程
第六步,使用AndroidStudio打開該Eclipse工程
選中Unity導出了Eclipse工程,OK。
存儲到合適的路徑,Next。
三個勾都選上,Finish
進入正題
0、Eclipse -> AndroidStudio
我們先來看看從Eclipse工程到AndroidStudio工程,在結構上有哪些變化,下圖為AndroidStudio工程自動生成的導入摘要。
通過這個文件我們可以看到,AndroidStudio其實是建立了一個新的AndroidStudio工程,然後將原Eclipse工程中有用的文件轉移到對應目錄。
顯而易見的遷移就不說了,主要看看libs文件夾中的遷移方向,我們可以看到.jar文件都轉移到了app/libs文件夾下、/.so文件都轉移到了app/src/main/jniLibs文件夾下/*.so。
1、程序入口
任何程序都有一個入口,Unity導出的Android工程中也不例外,通過下圖我們可以看到,在AndroidManifest.xml文件中,將UnityPlayerActivity設置為應用的入口。(AndroidManifest.xml是Android的配置文件之一,具體請自行搜索~)
通過下圖我們可以看到,UnityPlayerActivity是繼承了Activity,至於它是什麼我就不贅述了,大家可以看一下這一篇文章:Activity詳解(生命周期、以各種方式啟動Activity、狀態保存,完全退出等)
下圖為一個Activity的生命周期,我們可以看到系統事件存在著非常有用的監聽,在UnityPlayerActivity.java裡面我們也可以看到對應的函數,這意味著在Unity中一樣可以收到這些事件,以後我們將繼承UnityPlayerActivity,並重寫這些監聽。
2、C# -> C++
這就是個很尷尬的問題了,現在5.3.5的版本還不支持在Android平台下使用IL2CPP的模式,但是5.4的版本已經可以支持了,這一點我打算等5.4的版本出了再補上~
3、資源 StreamingAssets -> app/src/main/assets
Unity導出Android工程後,原工程中的各種資源都被壓縮、打包、加密後存放在app/src/main/assets/bin/Data文件夾中,見下圖,這一點和iOS是一致的,網上也有很多資源解密的方法,大家有需要可以自行搜索。
我們重點說一下Unity中的StreamingAssets文件夾,關於這個文件的作用,大家可以看一下這篇文章:Unity3D研究院之手游開發中所有特殊的文件夾
通過下圖我們可以看到,StreamingAssets文件夾中的ALL_EmptyTxt.txt文件被完整地拷貝到assets文件夾中,實際上不光是文件,文件夾也會原封不動地拷入該文件夾。
至於這有什麼用,比如說,配置文件放在這里,上手機調試的話可以在Android工程中直接修改配置,而不需要到Unity里重新導出Android工程。
4、 Plugins/Android/libs -> app/libs 、app/src/main/jniLibs
Plugins/Android文件夾中通常會放一些.jar、.so文件,這些文件是什麼、有什麼用,大家可以看一下官方的文檔:Building Plugins for Android
在Android-Studio工程中,.jar文件都轉移到了app/libs文件夾下、/.so文件都轉移到了app/src/main/jniLibs文件夾下/*.so。
這些文件將拷貝至在的libs文件夾中,在Android編譯時也將被編譯。
5、unity-classes.jar、libmain.so、libmono.so、libunity.so
unity-classes.jar是unity的封裝好的一些Java類,用於在Android原生環境下處理相關業務,如果有興趣的同學可以去反編譯看看。
libmain.so、libmono.so、libunity.so文件是Unity寫的底層CPP,當然其中也包含我們的C#邏輯,由於我們的重點不在這,就不展開講了。(這個超綱,我沒研究過~)
6、 Icon
在Unity的Player Settings是中,我們可以添加相應的Icon
這些Icon圖片將被重新壓縮、命名最後放入下圖中的位置。
關於在哪邊設置icon的問題,看項目需要吧,如果覺得解析度不夠可以到導出工程這邊添加修改~
比如:多渠道打包時,可能要多次替換Icon,寫腳本在Android工程中自動化替換打包是一種不錯的選擇~
7、閃屏
Unity在Android是可以設置單圖片閃屏的,如下圖。
不過Android天生是不帶閃屏這種東西的,所以APP會在第一個Activity中先顯示預先設定的圖片。想深入了解可以看一看這篇文章:Android進階篇之引導頁系列之Splash閃屏Logo
Unity的在Android的閃屏實現應該也是這樣處理的,注意注意!!這個思路很重要,以後我們Unity的閃屏也是這個思路做的。
8、Player Settings -> 設置
㈤ 關於Unity部署安卓程序時讀取配置文件的問題
放在Unity項目中名為StreamingAssets文件夾中的任何文件將會被一字不差地復制到目標機器上的特定文件夾里
MAC/Win: path = = Application.dataPath + "/StreamingAssets";
iOS: path = Application.dataPath + "/Raw";
Android: path = "jar:file://" + Application.dataPath + "!/assets/";