1. 程式人生 > >Unity與安卓交互心得

Unity與安卓交互心得

capture ati unable persist 分享功能 ble eat 目錄 git

一 調用Android原生分享功能。

不需要網上說的在Android studio或者eclipse導出jar包到unity然後調用。只需要正常建立一個cs文件寫入以下代碼即可。

public void Share(string shareText, string imagePath, string url, string subject = "")

    {

#if UNITY_ANDROID

        AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");

        AndroidJavaObject intentObject 
= new AndroidJavaObject("android.content.Intent"); intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND")); AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("
parse", "file://" + imagePath); intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject); intentObject.Call<AndroidJavaObject>("setType", "image/png"); intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string
>("EXTRA_TEXT"), shareText); AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject jChooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, subject); currentActivity.Call("startActivity", jChooser); #endif

其中這裏有一個截圖分享,沒有特別的需求的話直接調用unity自帶的截圖功能。

string ScreenshotName = "screenshot.png";

string screenShotPath = Application.persistentDataPath + "/" + ScreenshotName;

Application.CaptureScreenshot(ScreenshotName);

默認情況下用這個方法得到的截圖保存在Application.persistentDataPath裏面,不同的平臺具體的路徑不一樣。通過函數名也可以知道,這個路徑是可以持久保存數據的路徑。我也用來保存遊戲數據的xml文件。

二 集成googleplaygamefyber sdk的心得。這個是我最近做的。正常情況下把插件全部導入進去就可以了。但可能會出現一系列錯誤,如打包不成功,運行閃退等情況。這種情況的產生的原因都是類似的,其他sdk的問題也可以借鑒。

打包不成功的原因我遇到的主要有以下幾種情況:

1無法合並xml。(Unable to merge android manifests.)

原因:這是因為存在多個xml的文件,這幾個xml文件存在相同的標簽但是內容屬性不一樣,導致unity不知道選擇哪一個。

解決方案:找出所有要打包進去的xml,刪除其中一部分沖突的。

2無法打包資源(Fail to re-package resources)

原因:聲明引用了不存在的資源。

可能是在AndroidManifest.xml中聲明引用了一些不存在的資源。常見問題出在這裏:

  <application

       android:allowBackup="true"

       android:theme="@android:style/Theme.NoTitleBar"

       android:icon="@drawable/app_icon" 

       android:label="@string/app_name">

解決方案: 將標簽內容換成上述默認的即可。這種問題常見與國內原生sdk的接入。

或者是你現有的jaraar包所依賴的包沒有導入進來。你需要找到並導入進來。放在Plugins\Android目錄下即可。

3無法轉換成dex(Unable to convert to dex format)

原因:各個jaraar包存在沖突。如重復資源包,各個相關聯的jaraar版本不一樣(這種情況可能可以導出但是app閃退)。

解決方案:找到並刪除重復的jaraar包,統一相互關聯的jaraar包的版本。

對於需要使用google service jar,aar的項目而言,建議使用統一的jar,aar處理插件,該插件還提供自定義導入jar,aar包。

地址:https://github.com/googlesamples/unity-jar-resolver

Unity與安卓交互心得