Android插件式开发+unity3d+EasyAr完成android实现ar插件式功能
Posted LZ涸泽而渔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android插件式开发+unity3d+EasyAr完成android实现ar插件式功能相关的知识,希望对你有一定的参考价值。
首先:我们要实现的功能是插件式开发ar功能,我是一个android工程师,做的事情是将Unity做的apk作为插件集成到我自己的apk中去(当然,没有Unity,unity也由我自己代劳了),如果有差不多的需求的朋友们,把目光扔过来
1.第一步,Easy实现Ar做了个识别图片并且显示3d模型,声音,透明视频的apk,如果不知道EasyAr如何实现请转移至 EasyAr实现图片识别,另外,在此基础上面增加了音乐播放与透明视频播放。不想看这一部分的请往后跳
(一)音乐播放直接在Target上增加Audio Source即可,需要注意的是,不写脚本的话,音频文件需要放在Resuorces中
然后
这样便做到了音乐播放与图片识别逻辑相互绑定
(二)透明视频播放
透明视频需要特殊处理过的透明通道视频,大家可以在这里面学习到easyar透明视频制作。有了视频素材后,
需要放置上去
在target下创建个plane
在Plane下添加脚本,脚本使用的是EasyAr制作的脚本
这样就实现了透明视频的播放,然后就准备导出APK了,但是因为导出的APK要作为插件使用,所以不能直接
导出APK,而是导出Project,并用as打开后对其进行修改
这样会得到一个工程文件夹,以上Unity的事情就完事了,接下来是Android部分
先给出官方的插件式开发教程,此处使用的是360的方案replugin360插件式方案,并且方式为内置插件
2.Android插件部分实现
(一)首先,创建一个Android工程,并且将刚刚Unity打包的工程作为model导入Android工程中去
首先解决so包问题,为了避免出现:your hardware does not support this application这种问题(我就踩过这个坑)
在app的build.gradle中加上:
andrpod
中加入
sourceSets main jniLibs.srcDirs = ['libs']
defaultConfig
中加入
ndk //选择要添加的对应cpu类型的.so库。 abiFilters 'x86', 'armeabi-v7a' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'如此做还不能解决的话,将jniLibs中的内容复制到libs中再试试
然后给我们的插件app加入权限,因为不是很了解unity权限与插件化之间的相互影响,所以直接加上权限
(因为我遇到过调起插件化界面时提示无权限)
接着是按照官网的流程,生成插件式apk
project处加上
dependencies classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.1'app的build.gradle中加入
apply plugin: 'replugin-plugin-gradle'
dependencies compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.1'接着BuildApk,并且将生成的apk修改为插件名称+jar格式的jar包,这样的话,插件式apk这边的事情就都做完了,
再运行一下,没问题就可以进入下一步了
3.宿主apk
首先在project中的build.gradle中加入
dependencies classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.1'然后在宿主apk中加入
apply plugin: 'replugin-host-gradle'
compile 'com.qihoo360.replugin:replugin-host-lib:2.2.1'
需要配置的还要加入
repluginHostConfig /** * 是否使用 AppCompat 库 * 不需要个性化配置时,无需添加 */ useAppCompat = true /** * 背景不透明的坑的数量 * 不需要个性化配置时,无需添加 */ countNotTranslucentStandard = 6 countNotTranslucentSingleTop = 2 countNotTranslucentSingleTask = 3 countNotTranslucentSingleInstance = 2具体可以看官方介绍
然后环境已经搭建好了,接下来就是调起插件apk了
将开始生成的插件化apk放在宿主的assets中的plugins中
然后去调用其插件式apk的activity
RePlugin.preload("artest");
mBtnOpen.setOnClickListener(new View.OnClickListener() @Override public void onClick(View view) RePlugin.startActivity(MainActivity.this, RePlugin.createIntent("artest", "com.example.a12280.artest.UnityPlayerActivity")); );当然,在这之前做好权限申请处理
最重要的是,插件式apk使用的包名为宿主apk的,所以因为EasyAr对包名有要求,所以更改宿主apk的包名
applicationId
这也是我踩过的坑之一
这样就完整的实现了需求
下面给出源代码,因为上传资源大小限制,所以只提取了关键代码,但是肯定够用了,有疑问或者问题的看客可以在下方留言,感谢!!
以上是关于Android插件式开发+unity3d+EasyAr完成android实现ar插件式功能的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D插件UniRx(基于Unity的响应式编程框架)插件教程
Unity3D插件UniRx(基于Unity的响应式编程框架)插件教程
使用 JAR 插件从 Unity3D 调用 android 方法
Unity3D与Android之间——Androidmanifest.xml文件的介绍