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插件化实现ar识别

以上是关于Android插件式开发+unity3d+EasyAr完成android实现ar插件式功能的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D插件UniRx(基于Unity的响应式编程框架)插件教程

Unity3D插件UniRx(基于Unity的响应式编程框架)插件教程

使用 JAR 插件从 Unity3D 调用 android 方法

Unity3D与Android之间——Androidmanifest.xml文件的介绍

Unity3D与Android之间——Androidmanifest.xml文件的介绍

Unity3D与Android之间——Androidmanifest.xml文件的介绍