开发环境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</