接入Android SDK流程分為以下四步:
- 寫Android Activity文件 與 unity的調(diào)用java接口(AndroidJavaClass/AndroidJavaObject)
- Android java代碼寫完后功炮,打包成JAR包
- copy Android工程到Unity
- Android回調(diào)Unity(UnityPlayer.UnitySendMessage)
一、寫Android Activity文件 與 unity的調(diào)用java接口
Android Activity文件有兩種方式:
1. 繼承 UnityPlayerActivity
Android java代碼
public class MainActivity extends UnityPlayerActivity
unity的調(diào)用
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("WeChatlogin");
AndroidJavaObject對(duì)應(yīng)Java的基類Object梁剔,通過這個(gè)類馆蠕,可以在Unity中直接通過類名構(gòu)造Android中的Java類,一般我們使用該類進(jìn)行Android代碼調(diào)用
AndroidJavaClass繼承于AndroidJavaObject箕昭,與其之間的關(guān)系等價(jià)于Java中Object與Class的關(guān)系,一個(gè)是類的實(shí)例,一個(gè)是類的類型
2. 使用Unity本身正在使用的當(dāng)前Activity
Android java代碼
小米的sdk不要求我們創(chuàng)建獨(dú)立的Activity那先,所以我們直接使用Unity本身正在使用的當(dāng)前Activity坷檩,只是請(qǐng)注意却音,一定要使用runOnUiThread來調(diào)用改抡,否則可能會(huì)出現(xiàn)調(diào)用不到的情況。
public class XiaoMiSdkMgr{
public static void MiInit(final String appID,final String appKey)
{
UnityPlayer.currentActivity.runOnUiThread(
new Runnable()
{
@Override
public void run()
{
MiAppInfo appInfo = new MiAppInfo();
appInfo.setAppId(appID);
appInfo.setAppKey(appKey);
appInfo.setAppType(MiAppType.online);
MiCommplatform.Init( UnityPlayer.currentActivity, appInfo );
}
});
}
}
unity的調(diào)用
using (AndroidJavaClass jc = new AndroidJavaClass("com.the7th.heaven.XiaoMiSdkMgr");)
{
jc.CallStatic("miLogin");
}
二系瓢、Android java代碼寫完后雀摘,打包成JAR包
方式1:
下面我們學(xué)習(xí)如何在Unity中去調(diào)用它。首先Build一下當(dāng)前的Eclipse工程八拱,代碼所有的.class文件都生成在了Android工程的bin文件夾中阵赠,當(dāng)前工程的路徑是UnityTestActivity->bin->classes->com->xys->你的.class文件。下面需要對(duì)這些.class文件進(jìn)行打包肌稻,蘋果系統(tǒng)的話打開電腦的終端清蚀,cd到classes文件夾的目錄下,接著執(zhí)行代碼
jar -cvf class.jar *
這行代碼的意思是把當(dāng)前目錄下的所有.class文件打包成.jar文件爹谭,保存文件名稱為class.jar
在上訴步驟中有一點(diǎn)尤為重要枷邪,==就是當(dāng)你在生成jar包之前請(qǐng)一定要確認(rèn)你要生成的路徑下有沒有R開頭的class文件==
例如這些R文件,這些R開頭的文件可能會(huì)導(dǎo)致你Unity發(fā)安卓包失敗诺凡,因?yàn)樵赨nity本身自帶的classer.jar包里面是有R文件的东揣,它會(huì)和你的這些R文件沖突。
方式2:
http://jingyan.baidu.com/article/ea24bc3984f5b2da62b33186.html
- 右鍵工程--->Export
- 點(diǎn)擊Java--->JAR file---->Nex
- 勾選src包即可腹泌,其他項(xiàng)不選
- 點(diǎn)擊finishi即可
三嘶卧、copy Android工程到unity
- 將Android工程中的res、asset copy到Assets\Plugins\Android
- 將JAR包和對(duì)應(yīng)SDK的jar copy到Assets\Plugins\Android\bin
- 設(shè)置AndroidManifest.xml
四:Android回調(diào)unity
UnityPlayer.UnitySendMessage("ThirdLoginGameobject","WeChatloginCallBack",o.toString());
第一個(gè)參數(shù)是Game Object對(duì)象凉袱,所以需要在游戲?qū)ο笊辖壎_本芥吟。
第二個(gè)參數(shù)是unity中定義的方法名。
第三個(gè)參數(shù)是定義方法的參數(shù)(可空)专甩。