这段时间在研究Unity4.3开发环境下,如何调用由Android SDK4.4.2写的Activity。参考了很多网上的博客,百度出了几十篇大部分都是转载雨松MOMO的,这里必须向雨松MOMO表示敬意!但雨松MOMO写的博客太旧了,不少内容已经过时,我严格按他说的步骤进行,还是出了问题,所以本博客就是告诉大家在Unity4.3+Android SDK4.4.2环境,起动Activity的细节。
我这篇博客不会从零讲起,所以首先给出两个重要的链接,大家应该看一下:
第一个是雨松MOMO的 http://www.xuanyusong.com/archives/667 这篇博客的概念是正确的,但操作过程已过去
第二个是一个比较新的博客 http://www.narkii.com/club/thread-320335-1.html 这篇博客的概念和操作都是正确的,但细节有所省略,重点不够明确,我的博客即是对它的补充。
步骤:
1:打开Eclipse,创建一个Android工程,注意,要么在创建时选择创建库,要么创建之后在工程属性的Android页面勾选Is Library。
2:在工程属性中的Java Build Path -> Libraries中,用Add External JARs按钮,把Unity的classes.jar加进来,比如我的Unity是装在D盘,则路径是:D:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin。
3:写两个Activity,A和B,实现在A中启动B。这个过程可以参考上述推荐的博客,他们讲的很详细,我这里只是强调一下,A需继承自UnityPlayerActivity,而B则只需继承自Activity。
4:编译Android工程,会在bin目录下生成一个XXX.jar文件,注意,这个jar只有2k左右大小是不能用的,原因是很多class没有包含进去,比如很重要的R.layout.class。编译完了后必须使用Export导出,并选择正确的打包项才会生成一个100-600k大小的jar,这一点雨松MOMO没有讲。下面是我选择的打包项:
5:至此,Android部分基本OK。打开Unity创建一个Project,在Assets\Plugins\Android下面,把刚刚生成的jar拷贝过来,另外还有res文件夹。
6:到Unity的安装目录下D:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer找到AndroidManifest.xml,将其拷贝到Unity工程的Assets\Plugins\Android目录下,然后修改它有两个地方要修改,1是把package改为你的android工程的包名,2是把<activity android:name=这句等号后面的内容改为你的Android工程的主Activity的名字,比如我的:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.unitytestactivity"
android:installLocation="preferExternal"
android:theme="@android:style/Theme.NoTitleBar"
android:versionCode="1"
android:versionName="1.0">
..........
..........
<activity android:name=".UnityTestActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
注意名字前的点。第二句表示启动时不显示Title,这个问题曾折腾我很久。第三句直接拷贝。
7:写Unity下的脚本cs文件,这里没什么好说的,参考雨松MOMO。
8:Unity的Build Setting注意把Bundle Identifier改为你的Android工程的包名。
9:注意,从Unity中启动一个Activity的功能无法在Unity中模拟运行,必须安装到真机中才能看到效果,我曾傻傻的并郁闷的试了好久。估计后续的Unity版本会改进这个问题。