Unity與安卓交互心得
一 調用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文件。
二 集成googleplaygame與fyber 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的接入。
或者是你現有的jar,aar包所依賴的包沒有導入進來。你需要找到並導入進來。放在Plugins\Android目錄下即可。
3無法轉換成dex(Unable to convert to dex format)
原因:各個jar,aar包存在沖突。如重復資源包,各個相關聯的jar,aar版本不一樣(這種情況可能可以導出但是app閃退)。
解決方案:找到並刪除重復的jar,aar包,統一相互關聯的jar,aar包的版本。
對於需要使用google service jar,aar的項目而言,建議使用統一的jar,aar處理插件,該插件還提供自定義導入jar,aar包。
地址:https://github.com/googlesamples/unity-jar-resolver
Unity與安卓交互心得