Unity项目嵌入原生Android项目

说明:

通过Unity开发android AR,导出项目作为一个模块嵌入到原生的Android项目中,并通过跳转的方式打开AR内容。本文档使用的是Vuforia,有机会再试试其他的AR平台,例如AR CORE,ARKIT
Unity版本:使用5.6.4 2017.4.3

注意:如果是2017以下版本的话,打包出来的项目里面的libs是jar文件,在android studio可以直接引用。

如果2017版本的话,内嵌了Vuforia,打包出来的只有一个AAR文件。如何解决AAR文件引导的问题。在最后有说明。

Android Studio版本:3.2 beta1

 

一.Unity操作:

制作好AR 项目(这个很简单,略过)

 

导出一个Android项目

Unity导出Android,导出的包名要和安卓的包名一样。


Unity项目嵌入原生Android项目_第1张图片

得到安卓项目,大概是这个目录结构

Unity项目嵌入原生Android项目_第2张图片

接下来的重点就是android Studio的配置了

二.Android Studio(以下简称AS)操作

AS里面导入Unity创建的项目
这里测试先新建一个项目


Unity项目嵌入原生Android项目_第3张图片

然后一直下一步就好了。创建好了一个安卓项目

Unity项目嵌入原生Android项目_第4张图片

接着就开始在AS里导入我们刚刚从unity导出的安卓项目。

File->NEW->import Module

Unity项目嵌入原生Android项目_第5张图片

选择项目目录

Unity项目嵌入原生Android项目_第6张图片

导入成功后是这样的

Unity项目嵌入原生Android项目_第7张图片

然后根据我的版本情况会发生这个异常报错。

Unity项目嵌入原生Android项目_第8张图片

这个时候将刚刚导入进来的ar项目里面的Manifest文件里的这个节点删除掉。


还要将intent-filter节点删除掉,不然会发生冲突

Unity项目嵌入原生Android项目_第9张图片

然后sync Project一下。又出现了一个新的异常

这是因为unity导出的安卓项目版本不高,高版本AS的语法更新了,现在需要去ar项目的build.gradle修改一下。

将项目视图改成Project,打开build.gradle


Unity项目嵌入原生Android项目_第10张图片

修改dependencies{}。把compile改成implementation,然后sync Now

OK,现在报错没有了,可以开始配置我们两个项目的依赖了。

Unity项目嵌入原生Android项目_第11张图片

进入Project Structure


Unity项目嵌入原生Android项目_第12张图片

Dependencies标签--->右边的绿色加号----选择第三个

Unity项目嵌入原生Android项目_第13张图片Unity项目嵌入原生Android项目_第14张图片

再接着回到刚刚AR项目的build.gradle中,将application修改成library,并且把applicationId这段注释掉

Unity项目嵌入原生Android项目_第15张图片

改完之后Sync一下。可以看到ar项目变成了一个library

Unity项目嵌入原生Android项目_第16张图片

在刚刚的过程中,又会发生一个报错

原因应该是多个ModelManifest文件中的application标签中的属性因为相同从而冲突了

解决方法:
在主项目中(也就是APP)中的Manifestmanifest标签加如下属性:
xmlns:tools = "http://schemas.android.com/tools"
application标签加:
tools:replace="android:icon,android:theme,android:allowBackup"

Unity项目嵌入原生Android项目_第17张图片

sync一下,报错解决了。

Unity项目嵌入原生Android项目_第18张图片

现在可以测试在安卓界面添加个按钮然后跳转到ar界面的效果了。
首先创建一个新的Activity

Unity项目嵌入原生Android项目_第19张图片

去到刚刚新建的Main2Activty中,将继承改成UnityPlayerActivity,删除掉setContentView(R.layout.activity_main2);

Unity项目嵌入原生Android项目_第20张图片

在主界面MainActivitylayout activity_main.xml中添加按钮

Unity项目嵌入原生Android项目_第21张图片

然后在MainActivity.java中添加按钮点击事件监听

public class MainActivity extends AppCompatActivity {
    private Button button1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button)findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }
        });
    }
}

Unity项目嵌入原生Android项目_第22张图片

测试一下:
shift+f10打包到真机上测试一下

Unity项目嵌入原生Android项目_第23张图片Unity项目嵌入原生Android项目_第24张图片

最后会出现一个问题,就是在旋转屏幕的时候,程序会崩溃,所以需要给VR窗口的activity添加一个标签
打开ARManifest,在activity标签加如下属性
android:configChanges="screenSize|keyboardHidden|orientation"

我给每个窗口都添加了一个,以防万一要用。

Unity项目嵌入原生Android项目_第25张图片

大功告成!
下面说一些注意事项
关于版本问题,我这个用的AS3.2的,新建一个项目的时候
targetSdkVersion默认是28

Unity项目嵌入原生Android项目_第26张图片

如果我把28改成了27或者26等等,都会报错。

 

解决2017版本内嵌Vuforia导出的libsaar文件会报错的问题

Unity项目嵌入原生Android项目_第27张图片

解决方法:

1.将导入的ar项目中的libs文件夹下的VuforiaWrapper.aar拷贝到主项目中的libs

Unity项目嵌入原生Android项目_第28张图片

2.然后将ar项目的build.gradle中的allprojects所有内容和
implementation(name: 'VuforiaWrapper', ext:'aar')复制到主项目的build.gradle

Unity项目嵌入原生Android项目_第29张图片

Unity项目嵌入原生Android项目_第30张图片

然后就可以了。

Unity项目嵌入原生Android项目_第31张图片

大功告成!!

你可能感兴趣的:(Unity项目嵌入原生Android项目)