背景:采用Google VR SDK for Unity 开发3D场景功能,然后导出Android项目,合并到一个Android App里面,供其它Activity调用。

  • 用Google VR for Unity SDK开发的Untiy项目导出来的Android项目,主Activity为com.google.unity.GoogleUnityActivity。如果需要在此基础上扩展一些功能,则需要实现自己的Activity(比如命名为GoogleCardboardActivity),并继承com.google.unity.GoogleUnityActivity,并把AndroidManifest.xml里面的主Activity修改为自己实现的Activity(比如刚才创建的GoogleCardboardActivity)。
  • 如果把主Activity替换成UnityPlayerActivity,则调用Untiy场景时,出来的内容看不到Cardboard的UI(返回按钮,中间的分割线,以及设置按钮)。
  • 从Android Activity调用GoogleUnityActivity的代码如下:
     Intent googleUnityIntent = new Intent(this, GoogleUnityActivity.class);
    AndroidActivity.this.startActivity(googleUnityIntent);
    AndroidActivity.this.finish();

    如果是自定义的Activity,则将GoogleUnityActivity.class替换成自定义的Activity.class。

  • 在Unity场景中调用GoogleUnityActivity定义的方法:
     AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    jo.Call("someAndroidMethod");

    someAndroidMethod为写在GoogleUnityActivity中的Android方法。

  • 如果该Android方法中需要调用到mUnityPlayer,则需要把调用mUnityPlayer的代码写在Android的UI线程里面,否则会出错:

     public void someAndroidMethod() {
    runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mUnityPlayer.quit();
    }
    });
    }
  • couldn't find "libgvrunity.so"
    AndroidRuntime: FATAL EXCEPTION: main
    Process: com.elfnaga.googlecardboard, PID:
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.elfnaga.googlecardboard-1/base.apk"],nativeLibraryDirectories=[/data/app/com.elfnaga.googlecardboard-/lib/arm64, /data/app/com.elfnaga.googlecardboard-/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "libgvrunity.so"
    at java.lang.Runtime.loadLibrary(Runtime.java:)
    at java.lang.System.loadLibrary(System.java:)
    at com.google.unity.GoogleUnityActivity.<clinit>(GoogleUnityActivity.java:)
    at java.lang.Class.newInstance(Native Method)
    at android.app.Instrumentation.newActivity(Instrumentation.java:)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:)
    at android.app.ActivityThread.access$(ActivityThread.java:)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:)
    at android.os.Handler.dispatchMessage(Handler.java:)
    at android.os.Looper.loop(Looper.java:)
    at android.app.ActivityThread.main(ActivityThread.java:)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)
    - ::38.089 -/? W/ActivityManager: Force finishing activity com.elfnaga.googlecardboard/com.google.unity.GoogleUnityActivity

    原因是Google VR SDK for Unity中的libgvrunity.so只提供了armv7版和x86版,没有提供arm64版本,所以需要修改Android项目中的build.gradle,添加产品偏好:

     android {
    productFlavors {
    armv7 {
    ndk {
    abiFilter "armeabi-v7a"
    }
    }
    x86 {
    ndk {
    abiFilter "x86"
    }
    }
    fat
    }
    }

    则不会出现找不到libgvrunity.so。

原生Android App项目调用Untiy导出的Android项目的更多相关文章

  1. java.io.IOException: Could not delete path 'D:\mycode\reactnative\SecondTest\android\app\build\generated\source\r \release\android\support\v7

    问题解决 直观上看是没有删除某个文件,产生的IOException异常,实际上是因为上次编译导致的缓存没有清空导致的. 进入到android目录下运行下面代码清除上次打包时的缓存: ./gradlew ...

  2. How To Use Proguard in Android APP

    在Android开发完成即将发布给用户使用时,还有最后重要的一步:代码混淆,这时候,Proguard就派上用场了,大家谁也不想辛辛苦苦写的代码太容易被别人反编译过来,而Proguard就是帮我们实现这 ...

  3. Android 项目的代码混淆,Android proguard 使用说明

    简单介绍 Java代码是非常easy反编译的. 为了非常好的保护Java源码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还 ...

  4. Android App优化之ANR详解

    引言 背景:Android App优化, 要怎么做? Android App优化之性能分析工具 Android App优化之提升你的App启动速度之理论基础 Android App优化之提升你的App ...

  5. (通用)Android App代码混淆终极解决方案【转】

    App虽然没有那么的高大上,但是代码的混淆是代表了程序员对App的责任心, 也是对App安全的一点点保证.今天我会将自己做Android混淆的过程和体会分享给大家,也避免大家少走弯路,少跳坑. 本篇博 ...

  6. 用web技术开发出原生的App应用的体会(1)

    本人是是个前端小白,学前端已经有半年的时间了,前几天开了个博客,希望记录自己学习历程的点滴. 今天要写的是关于用html,css,javascript等web技术开发原生的app应用. 总所周知,we ...

  7. Android Library和Android APP、Java Library的区别

    Android Library和Android APP.Java Library的区别 Android Library在目录结构上与Android App相同,它能包含构建APP所需的一切(如源代码. ...

  8. Android App安装包瘦身计划

    Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...

  9. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法

    在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了“错误: 无法访问android.app.Activity 找不到android.app.Activity ...

随机推荐

  1. 解决VS2015启动时Package manager console崩溃的问题 - Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope

    安装VS2015,启动以后,Package manager console崩溃,错误信息如下: Windows PowerShell updated your execution policy suc ...

  2. C# 获取当前路径方法

    //获取包含清单的已加载文件的路径或 UNC 位置. public static string sApplicationPath = Assembly.GetExecutingAssembly ( ) ...

  3. wex5 实战 HeidiSQL 导入Excel数据

    一 前言 以前没做过大东西,突然客户说,我给你个数据,你部署到云上.我想,很简单啊,随口答应了. 悲剧发生了,客发给我的,居然是一张excel表!!! 本来想一条一条数据复制,一看,2000多条!! ...

  4. Jersey 2 + Maven + Tomcat + IntelliJ IDEA 搭建RESTful服务

    本文参考以下内容: [1] Starting out with Jersey & Apache Tomcat using IntelliJ [2] [Jersey]IntelliJ IDEA ...

  5. Raytracer

    http://www.cnblogs.com/miloyip/archive/2010/03/29/1698953.html http://www.scratchapixel.com/lessons/ ...

  6. HDU 3221 Brute-force Algorithm

              题意:问funny被调用了多少次,结果ModP,P不一定为质数.   首先很容易发现递推公式fn=fn-1*fn-2;写出前几项a,b,a*b,a*b^2,a^2*b^3,a^3* ...

  7. Chapter 1: 随机事件及其概率

    1. 随机试验,样本点,样本空间 若试验具有下列特点: 在相同条件下可重复进行 每次试验的可能结果不止一个,且所有可能结果在实验前是已知的 实验前不能确定哪一个结果会发生 则称该试验为随机试验,常记为 ...

  8. python 拾贝

    1. 内建的 type() 函数带三个参数时, 将作为强悍的动态类构造器. 如下:   type(name, bases, dict) 返回一个新的type对象. 基本上是 class 语句的动态形式 ...

  9. dubbo配置文件报错解决方案

    下载dubbo.xsd 文件 在eclipse->window->perferences->XML Catalog->Add ->File system->选择刚才 ...

  10. 关于editor网页编辑器ueditor.config.js 配置图片上传

    最近公司项目在做一个门户网站,其中新闻和简介等部分使用到了ueditor编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的 ...