开发环境Windows平台(Unity2017.1.0f3 Personal ,Android Studio 2.3.3)
在Unity项目中构建和使用Android Plugin
- AAR 插件 和 Android Library
- JAR 插件
- 继承UnityPlayerActivity
- Native(C++) 插件
Unity Android runtime
Untiy Android runtime
通过继承自
FrameLayout
的
UnityPlayer
实现,
UnityPlayer
实现了触控,键盘输入,相机,位置等特性。虽然这个
UnityPlayer
实现了大部分的
native
功能,但它不是应用程序的入口。
在通用的Android Unity应用程序中,程序的入口是
UnityPlayerActivity
。如果你看一下APK文件反编译后的AndroidManifest.xml文件,可以看到它是如何标记
UnityPlayerActivity
作为应用程序的Launcher的。
查看Unity安装目录发现,
UnityPlayerActivity
的源码可以在
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Source
中查看。
public class UnityPlayerActivity extends Activity
{
protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
// Setup activity layout
@Override protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy
mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
}
.........
// For some reason the multiple keyevent type is not supported by the ndk.
// Force event injection by overriding dispatchKeyEvent().
@Override public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.injectEvent(event);
return super.dispatchKeyEvent(event);
}
.........
}
可以看到
UnityPlayerActivity
继承自
Activity
,并且
UnityPlayerActivity
持有一个
UnityPlayer
实例。
UnityPlayerActivity
通过
UnityPlayer
分派
native
事件。
通用的Android插件开发,通过继承
UnityPlayerActivity
,并使子类成为整个应用程序的
LAUNCHER
Activity
,接下来将介绍继承
UnityPlayerActivity
方式的
Android Plugin
。
继承
UnityPlayerActivity
方式的
Android Plugin
Android Plugin
需要包含Android项目中
build
后得到的
app-debug.aar
和
Manifest.xml
以及资源文件等,提供给Unity项目使用。文件存放在Unity项目中的
/Assets/Plugins/Android
。Unity项目中的代码通过
app-debug.aar
与封装在其中的Android代码进行交互。For more details about
.aar
, see
Android Developer Doc
. And for more information about
“How Unity produces the Android Manifest”
, see
Unity Developer Doc
那么,接下来新建Android项目,进而生成
app-debug.aar
文件和
Manifest.xml</