gvr-android-sdk 初探

薄伟彦
2023-12-01

最近下了个google的vr sdk,下载地址:https://github.com/googlevr/gvr-android-sdk,因为没有开源,所以只能拿java反编译去看,幸好大部分代码都能看到(除了native的),一边看官方文档一边看代码,下面记录下之间遇到的一些问题:

1、编出来老是xml错误:首先看libraries/native/README.md,按照其中步骤操作。我用的是video那个例子,打开对应sample目录下的build.gradle,编辑如下

apply plugin: 'com.android.application'


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"


    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    
    /** See the documentation in libraries/native/README.md regarding architectures.**/
    sourceSets {
        main {
            jniLibs.srcDir file('jniLibs/')
        }
    }


/** Use this to remove the default native library.**/
    packagingOptions {
        exclude('lib/armeabi-v7a/libpanorenderer.so')
    }


}


dependencies {
    compile project(':libraries-common')
    compile project(':libraries-commonwidget')
    compile project(':libraries-videowidget')
}

之后就能编出包了


2、因为自带的sdk在设置vr参数的时候会跳到googleplay商店,让你下个app,然后通过那个app扫码才能设置各种参数,实在是太麻烦了。后来搜了下网上,发现了这么个文章

https://medium.com/google-developer-experts/using-google-cardboard-with-unsupported-vr-viewers-95c17e65bc1#.fwdejin2z

这文章大概意思就是用https://wwgc.firebaseapp.com/ 的设置来配置google carboard的参数,方法很麻烦,但原理就是通过网站模拟carboard,然后在生成参数,最后写到手机的文件中,最后在手机里起sample的时候sameple本身会读那个文件,然后参数就有效果了。

后来研究了下代码,发现最核心的读写参数函数就是com.google.vr.cardboard.ConfigUtils.readDeviceParamsFromExternalStorage 以及writeDeviceParamsToExternalStorage,在初始化view的时候会掉read函数,最开始的想法是重载相关的函数,把这个read函数换掉或者重新设置参数,后来发现sdk封的比较死,没法继承,重写一遍又比较麻烦,所以想了个比较蠢的办法:在程序启动时先用自己伪造的数据写入到文件中, 这样sdk在读的时候就能读到新数据了,代码如下

private void recreateViewParams()
{
  String urlString = "http://google.com/cardboard/cfg?p=CgNsY2gSA2xjaB0xCCw9JY_CdT0qEAAASEIAAEhCAABIQgAASEJYADUpXA89OggAAAAAAAAAAFAAYAA";
  Uri tUri = Uri.parse(urlString);
  com.google.vrtoolkit.cardboard.proto.nano.CardboardDevice.DeviceParams tParams = ConfigUtils.readDeviceParamsFromUri(tUri);
  tParams.setInterLensDistance(0.050f);
  ConfigUtils.writeDeviceParamsToExternalStorage(tParams);
}
那一大长串网址是通过https://wwgc.firebaseapp.com/ 这个网站的参数生成出来的,如果不用也可以,直接自己填param就行,在view初始化前调用这函数,就把参数写到sdcard里了,这样初始化后view就可以读到伪造的数据


3、手机能直接播放的视频这个sdk就能播,不能直接播放的就会报错,估计是用的手机自带的解码器



 类似资料: