natjs / nat

A powerful kit for adding native functionalities to your weex app.
http://natjs.com
282 stars 25 forks source link

weex keeps stopping in android8.0 when using nat-camera #29

Closed weenta closed 6 years ago

weenta commented 6 years ago

using module nat-camera, it works fine in android 6.0; but in android8.0; it has error like this:

FATAL EXCEPTION: main
Process: com.weex.app, PID: 3520
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.taobao.weex.bridge.NativeInvokeHelper$1.run(NativeInvokeHelper.java: 50)
    at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java: 49)
    at android.os.Handler.handleCallback(Handler.java: 789)
    at android.os.Handler.dispatchMessage(Handler.java: 98)
    at android.os.Looper.loop(Looper.java: 164)
    at android.app.ActivityThread.main(ActivityThread.java: 6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java: 240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 767)
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at com.taobao.weex.bridge.MethodInvoker.invoke(MethodInvoker.java: 46)
    at com.taobao.weex.bridge.NativeInvokeHelper$1.run(NativeInvokeHelper.java: 48)
    at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java: 49)
    at android.os.Handler.handleCallback(Handler.java: 789)
    at android.os.Handler.dispatchMessage(Handler.java: 98)
    at android.os.Looper.loop(Looper.java: 164)
    at android.app.ActivityThread.main(ActivityThread.java: 6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java: 240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 767)
Caused by: android.os.FileUriExposedException: file:///storage/emulated/0/Instapp/nat_img_1520219484384.jpg exposed beyond app through ClipData.Item.getUri()
    at android.os.StrictMode.onFileUriExposed(StrictMode.java: 1958)
    at android.net.Uri.checkFileUriExposed(Uri.java: 2348)
    at android.content.ClipData.prepareToLeaveProcess(ClipData.java: 941)
    at android.content.Intent.prepareToLeaveProcess(Intent.java: 9735)
    at android.content.Intent.prepareToLeaveProcess(Intent.java: 9720)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java: 1609)
    at android.app.Activity.startActivityForResult(Activity.java: 4472)
    at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java: 54)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java: 67)
    at android.app.Activity.startActivityForResult(Activity.java: 4430)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java: 720)
    at com.instapp.nat.camera.CameraModule.captureImage(CameraModule.java: 69)
    at com.instapp.nat.weex.plugin.Camera.Camera.realCaptureImage(Camera.java: 50)
    at com.instapp.nat.weex.plugin.Camera.Camera.captureImage(Camera.java: 44)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.taobao.weex.bridge.MethodInvoker.invoke(MethodInvoker.java: 46)
    at com.taobao.weex.bridge.NativeInvokeHelper$1.run(NativeInvokeHelper.java: 48)
    at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java: 49)
    at android.os.Handler.handleCallback(Handler.java: 789)
    at android.os.Handler.dispatchMessage(Handler.java: 98)
    at android.os.Looper.loop(Looper.java: 164)
    at android.app.ActivityThread.main(ActivityThread.java: 6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java: 240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 767) 

any idea why this happen?

sushilparajuli commented 6 years ago

@Acathur, I got the same issue with the latest weex environment. Also implement error condition too like below but the app is crashing :

Nat.camera.captureImage({}, (err, ret) => {
          if(err){
            modal.toast({message: JSON.stringify(err), duration: 0.5});
          }
          this.imageData = ret.path
        })
acathur commented 6 years ago

Maybe the permission mechanism of Android 8.0 has changed?

weenta commented 6 years ago

got it; change the targetSdkVersion=26-->targetSdkVersion=23; then it works fine; but still dont know why this happen