-1

我在 Android Studio 上使用 Kudan SDK v.1.4 包:eu.kudan.ar

该项目构建没有错误,但是当我运行该应用程序时,出现此错误:

12-29 16:17:33.669 22875-22875/? 我/艺术:后期启用 -Xcheck:jni 12-29 16:17:33.689 22875-22889/? E/art:写入握手字节失败(-1 of 14):Broken pipe 12-29 16:17:33.689 22875-22889/? 我/艺术:调试器不再活动 12-29 16:17:33.709 22875-22875/?W/ResourcesManager:在 getResources()--------------config= {1.0 ?mcc?mnc it_IT ldltr sw800dp w1280dp h726dp 240dpi xlrg land finger -keyb/v/h -nav/h suim 之前:1 s.6} 12-29 16:17:33.719 22875-22875/? I/InstantRun:Instant Run Runtime 已启动。Android包是eu.kudan.ar,真正的应用类是null。12-29 16:17:33.729 22875-22875/? W/art:未能找到 DexFile /data/data/eu.kudan.ar/files/instant-run/dex/slice-slice_9-classes.dex 的 OatDexFile(规范路径 /data/data/eu.kudan.ar/文件/即时运行/dex/slice-slice_9-classes。dex)在 OatFile /data/data/eu.kudan.ar/cache/slice-slice_9-classes.dex 12-29 16:17:33.909 22875-22875/ 中具有校验和 0x47fac275?I/CachedDir:文件已更改,重新填充缓存 - 1357 12-29 16:17:33.919 22875-22875/?带链接器:libKudan.so:未使用的 DT 条目:类型 0x6ffffffe arg 0x66c50 12-29 16:17:33.919 22875-22875/?带链接器:libKudan.so:未使用的 DT 条目:类型 0x6fffffff arg 0x3 12-29 16:17:33.949 22875-22875/?我/kudan-ndk:您的 API 密钥有效。12-29 16:17:34.099 22875-22875/? I/ARFragment: onResume 12-29 16:17:34.159 22875-22875/? I/View: ssignParent(ViewParent parent) 父是: android.view.ViewRootImpl@2d5754ef 12-29 16:17:34.179 22875-22925/? I/OpenGLRenderer:初始化 EGL,版本 1.4 12-29 16:17:34.189 22875-22875/? I/KudanAR:屏幕:1920x1128 12-29 16:17:34.499 22875-22875/? I/HwCust:为类 android.media.HwCustMediaPlayerImpl 找到构造函数 12-29 16:17:34.509 22875-22875/?E/MediaPlayer:应该已经设置了字幕控制器 12-29 16:17:34.519 22875-22875/?W/System.err: java.io.FileNotFoundException: 该文件不能作为文件描述符打开;它可能被压缩 12-29 16:17:34.519 22875-22875/? W/System.err:在 android.content.res.AssetManager.openAssetFd(本机方法) ... java.lang.reflect.Method.invoke(Method.java:372) 12-29 16:17:34.519 22875-22875/? W/System.err:在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964) 12-29 16:17:34.519 22875-22875/?W/System.err:在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759) 12-29 16:17:34.529 22875-22875/?E/AndroidRuntime:致命异常:主进程:eu.kudan.ar,PID:22875 java.lang.NullPointerException:尝试调用虚拟方法 'eu.kudan.kudan.ARWorld eu.kudan.kudan.ARImageTrackable.getWorld()'在空对象引用上 在 eu.kudan.ar.MainActivity.setup(MainActivity.java:56) 在 eu.kudan.kudan.ARView.setup(ARView.java:104) 在 eu.kudan.kudan.ARView.onSizeChanged(ARView.java:306 ) 在 android.view.View.sizeChange(View.java:15848) 在 android.view.View.setFrame(View.java:15813) 在 android.view.SurfaceView.setFrame(SurfaceView.java:316) 在 android.view .View.layout(View.java:15729) 在 ....

资产导入良好。问题是 :

trackableSet.loadFromAsset("demo.KARMarker");

这是我的活动:

public class MainActivity  extends ARActivity implements ARImageTrackableListener {

public void onCreate(Bundle savedInstanceState) {
    // set api key for this package name.
    ARAPIKey key = ARAPIKey.getInstance();
    key.setAPIKey("lwoY4cyKEI+suoK+VyK2RtCjSMnzQRcsJmgAP8Uwt5MIJvxKCrE8rwLTCRxKQeuMMG9yG61W5J/53GpU0FdrDSNI6DDYoMWTQYcjvZ9kRWL2qW8782mk8Wem6T8orsVN977Ft+6biQIoTLWE4ZKJgd0BKjqwwkX17RYgjp1NCTTFnxhYzzmbA16ocun1Ks88bLjN2ONVlOwTrPBET+cFFTieoAx1HlPhT0G32k5qCDDhb/OkVYWHPtBxLfHW1HmRJLpC1Q7GIKVgHH+WAekrMDm6Sf7r+CrVxKsmTPmONojOvWo59y1EqwYOjntUOVtnptHpMNlM9MSC9gA9hl7A90lXRhVqoxGVJDPrNjFOYzCVhzECKZ7WupYjBvfHLq7LRSiT1dXVqMCU496QlF2pXlmVaICOMV0MtfkEQqstQBXvkFEAJVVbLr8eUQZZbXAYw5Rd3syT2zPYNIDpxJn2+vyIXFHR2AD1B7cUZxuYOJfbUSODUdkhUWB/MpFtYG8o677/ReB+vDmngFlvz16hR0gOdauHzX0nhl8l0N3MjhjKF4dxqIrqmc0W2g2fSDHga7frddX2JRgOgJEsmJYldNe7FXMjUNsUdCuMEEf9YVwpDoyqQYZzNNseZOBtIPS+1eHhtlmTg7egvIIU9XQPrz7b/zxEVuw7ObTv8PmmxyI=");
    super.onCreate(savedInstanceState);
}

public void setup() {
    // create a trackable from a bundled image.
    ARImageTrackable wavesTrackable = new ARImageTrackable("waves");
    wavesTrackable.loadFromAsset("waves.png");

    // create video texture.
    ARVideoTexture videoTexture = new ARVideoTexture();
    videoTexture.loadFromAsset("waves.mp4");
    ARVideoNode videoNode = new ARVideoNode(videoTexture);

    // add video to the waves trackable.
    wavesTrackable.getWorld().addChild(videoNode);

    // load a set of trackables from a bundled file.
    ARTrackableSet trackableSet = new ARTrackableSet();
    trackableSet.loadFromAsset("demo.KARMarker");

    ARImageTracker tracker = ARImageTracker.getInstance();

    // add our trackables to the tracker.
    tracker.addTrackableSet(trackableSet);
    tracker.addTrackable(wavesTrackable);

    // create an image node.
    ARImageTrackable legoTrackable = tracker.findTrackable("lego");
    ARImageNode imageNode = new ARImageNode("BatmanLegoMovie.png");

    // make it smaller.
    imageNode.scaleBy(0.5f, 0.5f, 0.5f);

    // add it to the lego trackable.
    legoTrackable.getWorld().addChild(imageNode);
}

@Override
public void didDetect(ARImageTrackable trackable) {
    Log.i("KudanSamples", "detected " + trackable.getName());
}


@Override
public void didTrack(ARImageTrackable trackable) {
    Log.i("KudanSamples", "tracked");
}

@Override
public void didLose(ARImageTrackable trackable) {
    Log.i("KudanSamples", "lost " + trackable.getName());
}
}

解决了

我将资产移动到 /sdcard/marker/asset/ 而不是

trackableSet.loadFromAsset("demo.KARMarker");

我使用的方法:

trackableSet.loadFromPath("sdcard/marker/demo.KARMarker");

也许可使用:

sVmoznmKZ+4nFEHD6HoslwpC26PNuBZGHrikUwyon2BKSvza1yu2CqbSrae+pHPr1NHjhsf5pHQOZn8IEqXlqXFodGsrOJhxJANbMOdvnRLUi9/QWGqyRL9FViDmyohw6e5R7U4Ex8H7d7spLLvhfp5HFv56DgLr8c8sC2ipDtv9g1IjOTaY7UGxata3eulG2A/UkIdRv2NcotZXqan01xQUWFAislEwlGguParEYiwu11T4mqtU3dQBbfxpvxbczjdYz493YG3rAO2RHgT+5M5TJShJsz2irkNo71JD2Fzqf4AR2b4+7t1c55zKjegXzGS6Xa/rpNn9yiXUn7rUYIHNvN3cEQa9HsZiVxAV4vJgxFS+T/AxfWqKrEg1uj6xF5MsodZ2EkZ8mqliYIsxZqnFz+Re2HeWG8wvrEob0ZwRIO0TxppAemZc3HChTAPLcNt5gzeBk0oRP4wnrFAFFBDi8XjDocwTSVw++hWZb1qNHzt6bKLsMDRT057UVuuZB6M8f7EOQD79Oah0Vrx/3DUK6e9BEV8oGFNHtk1wyYEkg0i6RLhVSokGx//Qj36A4gCz3h1OjtfB0OuukbNq7xI1L/FcNQLmGYNGZwszARjGr9ESw1gVAkbQMxaV27uo/KoIq4+nR7RL8iT7t7NAaXCFIi24RR+7WGjTvKqWYjA=

4

1 回答 1

0

首先文件夹的名字应该是assets而不是asset。

  • 接下来,将您的 assets 文件夹保存在 app 目录中(与 res 文件夹平行)。

  • 现在尝试运行您的应用程序并确保该资产文件夹中的所有文件都可用。

仍然收到该错误?

此时它应该可以正常运行,但您可以进行以下更改以确保应用程序正常运行并且不会出现任何运行时错误。

替换这个

ARImageNode imageNode = new ARImageNode("BatmanLegoMovie.png");

ARImageNode imageNode = new ARImageNode();
imageNode.initWithPath("file:///android_asset/BatmanLegoMovie.png");

最后,尝试先跟踪图像。您正在尝试一起跟踪图像、视频等。不知道这是否正确,但只是为了确保至少一件事正常工作。

于 2017-05-25T09:21:03.057 回答