在ADT

时间:2016-07-07 19:52:24

标签: android adt google-vr

我需要将GoogleVR支持集成到使用Eclipse中的ADT工具链构建的现有项目中。

到目前为止,我已经提取了base.aar和common.aar(来自Gradle),将classes.jar移动到具有唯一名称(base-classes.jar等)的“libs”文件夹中,创建了一个库项目使用“来自现有源的新Android项目”工具,并将它们作为依赖库项目附加到主应用程序。

这似乎构建正常,并且至少可以很好地进入“主要”启动画面活动,但是,当我尝试激活GvrActivity时,应用程序在运行时崩溃:

    Intent intent = new Intent(this, FinditVRActivity.class);
    startActivity(intent);

...其中FinditVRActivity本质上是一个空白的GvrActivity,有几行GL来设置背景颜色(又名“hello world”)......应用程序崩溃时出现以下错误:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {com.YourCompany.Findit3D / com.YourCompany.Findit3D.FinditVRActivity}:android.view.InflateException:二进制XML文件行#9:com.google类错误。 vr.sdk.base.GvrView

以下是日志崩溃之前的最后几位......

07-07 12:42:01.466: D/Activity(8246): performCreate Call secproduct feature valuefalse
07-07 12:42:01.466: D/Activity(8246): performCreate Call debug elastic valuetrue
07-07 12:42:01.656: D/CardboardViewNativeImpl(8246): NativeProxy not found
07-07 12:42:01.656: D/CardboardViewNativeImpl(8246): Loading native library gvrbase

我确实知道Android Studio中的股票示例适用于我的测试设备,所以这应该不是问题。我假设我在ADT的项目链接中遗漏了一些东西,但我不确定是什么。我离开这里的想法是什么?

谢谢你的时间!

修改的 删除了startActivity示例中不需要的代码

edit2 注意:所有项目都禁用了ProGuard

EDIT3

我已经做了一些进一步的挖掘,并将崩溃范围缩小到以下代码示例。

正如预期的那样,此示例活动将在启动时设置蓝色背景。

public class FinditVRActivity extends GvrActivity {

    private GLSurfaceView _glSurfaceView;

    public static class GLRenderer implements Renderer {
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
        }

        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            // No-op
        }

        @Override
        public void onDrawFrame(GL10 gl) {
            glClear(GL_COLOR_BUFFER_BIT);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        _glSurfaceView = new GLSurfaceView(this);
        _glSurfaceView.setEGLContextClientVersion(2);
        _glSurfaceView.setRenderer(new GLRenderer());
        setContentView(_glSurfaceView);
    }

    @Override
    protected void onPause() {
        super.onPause();

         _glSurfaceView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();

        _glSurfaceView.onResume();
    }
}

使用GrvView的这种类似活动崩溃时出现错误,这个错误似乎更接近目标。

public class FinditVRActivity extends GvrActivity {

    private GvrView _gvrView;

    public static class GVRRenderer implements GvrView.StereoRenderer {

        @Override
        public void onSurfaceCreated(EGLConfig config) {
            glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
        }

        @Override
        public void onNewFrame(HeadTransform headTransform) {
            glClear(GL_COLOR_BUFFER_BIT);
        }

        @Override
        public void onSurfaceChanged(int width, int height) {}

        @Override
        public void onFinishFrame(Viewport viewport) {}

        @Override
        public void onDrawEye(Eye eye) {}

        @Override
        public void onRendererShutdown() {}
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        _gvrView = new GvrView(this);
        _gvrView.setEGLContextClientVersion(2);
        _gvrView.setRenderer(new GVRRenderer());
        setContentView(_gvrView);
    }

    @Override
    protected void onPause() {
        super.onPause();

        _gvrView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();

        _gvrView.onResume();
    }
}
  

java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader [DexPathList [[zip file“/data/app/com.YourCompany.Findit3D-1/base.apk"],nativeLibraryDirectories=[/data/app/com。 YourCompany.Findit3D-1 / lib / arm,/ vendor / lib,/ system / lib]]]找不到“libgvrbase.so”

我实际上并没有在构建工件中的任何地方看到libgvrbase.so,所以看起来@Morrison Chang的假设是正确的。

这可能位于另一个.aar包中吗?

再次感谢!

1 个答案:

答案 0 :(得分:0)

您提到您正在从现有的.aar文件中手动提取以构建项目。应用程序崩溃前显示的logcat:

07-07 12:42:01.656: D/CardboardViewNativeImpl(8246): NativeProxy not found
07-07 12:42:01.656: D/CardboardViewNativeImpl(8246): Loading native library gvrbase

表示缺少NativeProxy中的CardboardViewNativeImpl,这就是我建议检查JNI库的原因。

根据您的回复,您似乎找到了相应的文件,并将它们放置在您的项目/库中,以便您能够使用ADT正确构建。

**更新**

完成所有工作的最后步骤非常复杂,所以我已将我的工作发布到GitHub,以作为未来可能偶然发现这个问题的人的指南。在撰写本文时,这仍然是一项正在进行中的工作。有关详细信息,请参阅活动问题。

https://github.com/drkstr101/gvr-android-sdk