fuselibs icon indicating copy to clipboard operation
fuselibs copied to clipboard

Image with Fuse.Views not working

Open jesusmartinoza opened this issue 7 years ago • 4 comments

The Image tag works fine inside a NativeViewHost but doesn't work with Fuse.Views.

<App>
	<Panel ux:Class="ImageRepro">
		<Image File="foo.png" Height="240" Width="240" X="-300" Alignment="CenterLeft" Y="-80" HitTestMode="None" />
	</Panel>
	
	<ClientPanel>
            <ExportedViews>
                <ImageRepro ux:Template="ImageRepro" />
            </ExportedViews>
	    <ImageRepro />
	</ClientPanel>
</App>
  • Device: Samsung A8(SM-A530F)
  • OS: Android 7.1.1
  • Fuse version: 1.8.1(build 15610)

jesusmartinoza avatar Apr 12 '18 18:04 jesusmartinoza

Maybe this could help :)

04-12 16:35:08.266 21061-21061/mx.qmarketing.thingsilove D/ViewRootImpl@73176bc[OnboardingActivity]: setView = DecorView@3a50645[OnboardingActivity] touchMode=true
04-12 16:35:08.275 21061-21061/mx.qmarketing.thingsilove W/System.err: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/drew/imaging/ImageMetadataReader;
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at com.foreign.Fuse.Resources.Exif.ExifAndroidImpl.GetOrientation113(ExifAndroidImpl.java:40)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at com.Bindings.ExternedBlockHost.GetOrientation113(ExternedBlockHost.java:529)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at com.Bindings.ExternedBlockHost.callUno_Uno_Platform_AndroidDisplay_OnFrameCallback55(Native Method)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at com.foreign.Uno.Platform.AndroidDisplay$1.doFrame(AndroidDisplay.java:55)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:928)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.view.Choreographer.doCallbacks(Choreographer.java:705)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.view.Choreographer.doFrame(Choreographer.java:637)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:916)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.os.Looper.loop(Looper.java:154)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6816)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1565)
04-12 16:35:08.276 21061-21061/mx.qmarketing.thingsilove W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1453)
04-12 16:35:08.277 21061-21061/mx.qmarketing.thingsilove W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.drew.imaging.ImageMetadataReader" on path: DexPathList[[zip file "/data/app/mx.qmarketing.thingsilove-1/base.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_dependencies_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_0_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_1_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_2_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_3_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_4_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_5_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_6_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_7_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_8_apk.apk", zip file "/data/app/mx.qmarketing.thingsilove-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/mx.qmarketing.thingsilove-1/lib/arm, /data/app/mx.qmarketing.thingsilove-1/base.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_dependencies_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_0_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_1_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_2_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_3_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_4_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_5_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_6_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_7_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_8_apk.apk!/lib/armeabi-v7a, /data/app/mx.qmarketing.thingsilove-1/split_lib_slice_9_apk.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
04-12 16:35:08.277 21061-21061/mx.qmarketing.thingsilove W/System.err:     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
04-12 16:35:08.277 21061-21061/mx.qmarketing.thingsilove W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
04-12 16:35:08.277 21061-21061/mx.qmarketing.thingsilove W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:312)

04-12 16:49:10.339 26813-26813/mx.qmarketing.thingsilove E/onboarding: InternalError: ImageSource error: 'Loading image from file failed. java.lang.NoClassDefFoundError: Failed resolution of: Lcom/drew/imaging/ImageMetadataReader;': java.lang.NoClassDefFoundError: Failed resolution of: Lcom/drew/imaging/ImageMetadataReader; in Fuse.Resources.FileImageSourceImpl</usr/local/share/uno/Packages/Fuse.Elements/1.8.1/Resources/ImageSource.uno:112>

jesusmartinoza avatar Apr 12 '18 21:04 jesusmartinoza

This would be a packaging issue - since exported aar relies on external dependencies, you need to include them in your app or provide aar with pom file than lists these dependencies.

Refer to build.gradle file from build folder to gather dependencies list

vvarp avatar May 15 '18 14:05 vvarp

Omg! Thanks @vvarp It worked when add the library compile 'com.drewnoakes:metadata-extractor:2.11.0' Is there a way tu bundle the library in the dependency or do we need to update the docs? 🤔

jesusmartinoza avatar May 15 '18 16:05 jesusmartinoza

Since I publish exported aar to Maven repository, I do that via patching build.gradle generated by uno with following publish task that includes POM generation for all used dependencies:

publishing {
    repositories {
        maven {
         ...
        }
    }
                     
    publications {
        aar(MavenPublication) {
            groupId "${System.env.GROUP_ID}"
            artifactId "${System.env.PROJECT_NAME}"
            version "${System.env.BUILD_NUMBER}"
            artifact("${System.env.PROJECT_NAME}.aar")

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.compile.allDependencies.each { dependency ->
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', dependency.group)
                    dependencyNode.appendNode('artifactId', dependency.name)
                    dependencyNode.appendNode('version', dependency.version)
                }
            }
        }
    }
}

That way, no matter dependencies I am using, aar always gets published with complete set of dependencies

vvarp avatar May 15 '18 16:05 vvarp