unity调用Android原生页面
因为最近几个项目的奇葩要求,
最后实现的结果应该是android调unity,
unity里面再可以调android
android单方向调unity非常简单,其他的坑还挺多的。
先从unity调android的原生intent页面开始做起,
试了半天多终于成功了。
unity和android studio版本更新太多,
网上很多方法其实都是对的,但可能很多东西需要改了,
参考了一下其他方法,
记录一下当前的正确方法,后面再加上Android调unity试试。
—————————————————————————————————————————————————
AndroidStudio
1.新建一个project,就先都默认add no activity就好,不需要用到这个。
2.在本project中File-New-New Module,选择Android Library。此处的PackageName后面要用到。
3.从unity安装目录的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes中,复制classes.jar出来,放到该Module的libs文件夹里,并右键add as library
4.新建一个MainActivity继承UnityPlayerActivity,这就是后面打开app最先显示的unity界面。
另外要新写一个调用intent的方法,这就是我要做的了,调用安卓原生的页面。
mActivity可以自己自定义来写,记得给mActivity写layout。
public class MainActivity extends UnityPlayerActivity {
Context mContext = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
public void showView() {
Intent intent = new Intent(mContext, mActivity.class);
startActivity(intent);
}
}
5.在该module的Manifest写,自己对照着改就行,这是大概的格式。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gzpi.mylibrary" >
<application
android:allowBackup="true"
android:label="调用程序测试"
android:supportsRtl="true">
<activity android:name=".MainActivity"
android:label="调用程序测试">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".mActivity"/>
</application>
</manifest>
6.在该module的build里,加上下面的代码,然后sync now
注意,新版本的导jar包的地址是build/intermediates/packaged-classes/release/了。
//task to delete the old jar
task deleteOldJar(type: Delete) {
delete 'release/AndroidPlugin.jar'
}
//task to export contents as jar
task exportJar(type: Copy) {
from('build/intermediates/packaged-classes/release/')
into('build/')
include('classes.jar')
///Rename the jar
rename('classes.jar', 'AndroidPlugin.jar')
}
7.在右边Gradle打开该module的Tasks-other 找到上面增加的exportJar,点击运行
这样build/文件夹里就会出现这个jar包了
—————————————————————————————————————————————————
Unity
1.新建一个项目,在项目Assets里新建Plugins-Android,把刚才module里的res和manifest复制过去,
再在这里新建bin文件夹,把jar包放进去,所以现在的结构是:
2.选择BuildSettings,Android的setting里,
Minimum API 改成上面AndroidStudio新建项目时的最低API.
再是把 packagename改成module的名字,也就是manifest里的这个packagename
3.unity里设个按键什么的绑定下面的调用代码,showView就是上面安卓MainActivity里的方法名字。
public void startMyActivity()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("showView");
}
这样就好了,如果在build的过程中 出现“Multiple dex files define: Lcom//BuildConfig”的错误,
用压缩软件把jar包打开,把里面的buildconfig删掉就好。