[Android-development] JNI problem with nested classes

Stromme Christian Christian.Stromme at digia.com
Mon Dec 2 22:08:45 CET 2013


On Dec 2, 2013 9:01 PM, Denis Kormalev <kormalev.denis at gmail.com> wrote:
>
> Nope, it is definitely not the reason for this crash. I saw it at Android 4.3
> (I've already added it to bug in tracker).
>
>
> --
> Regards,
> Denis Kormalev
>
> On Mon, 02 Dec 2013 23:37:39 dant3 wrote:
> > On Пн., 2013-12-02 at 13:17 +0000, Stromme Christian wrote:
> > > On 02 Dec 2013, at 08:19 , Denis Kormalev <kormalev.denis at gmail.com>
> wrote:
> > > > Hi all,
> > > >
> > > > I'm looking now at camera at android and found crash there when I try to
> > > > set
> > > > custom focus area. Small research showed me that it crashes with message
> > > > dvmFindClassByName rejecting 'android/hardware/Camera$Area'
> > >
> > > That seems strange, this indicates that the class name is wrong or that
> > > the class name is not converted to the correct format. It might be
> > > related to your android version, in which case we need to add some
> > > changes to the classLoader code. I have created a bug report[1] could you
> > > add information about your android version and device there?
> > > (Alternatively just replay here and I’ll update the bug report :)
> > >
> > > > It occures in static function areaToRect() in jcamera.cpp. What is more
> > > > interesting - there is another JNI call, but to normal class, not nested
> > > > one (android.graphics.Rect) which is before call to
> > > > android.hardware.Camera.Area.>
> > > The signature of the rect field is wrong, so that might be the core issue
> > > of the crash.>
> > > > I've tried to do next stuff:
> > > > 1. Add class resolving to initJNI() method and use jclass instead of
> > > > string
> > > > 2. Get jclass instance just before this call in areaToRect() function
> > > > and pass it instead of string
> > > >
> > > > Both solutions worked, but I'm sure they are not correct ones (they
> > > > looks more like workaround than like robust solutions).
> > > >
> > > > As I understand - problem is in getCachedClass() function in qjni.cpp
> > > > which
> > > > uses classLoader instead of FindClass() jni function (I believe it was
> > > > done
> > > > for special purpose but looks like it can be a cause for this problem).
> > > >
> > > > Any ideas or comments? Or I just do something wrong?
> > >
> > > I don’t think your doing anything wrong, but I suspect that there is an
> > > issue with the the class name resolution, this should not be fatal as
> > > there are fallback paths, but I need to look into it.
> > >
> > > > --
> > > > Regards,
> > > > Denis Kormalev
> > > >
> > > > _______________________________________________
> > > > Android-development mailing list
> > > > Android-development at qt-project.org
> > > > http://lists.qt-project.org/mailman/listinfo/android-development
> > >
> > > [1] https://bugreports.qt-project.org/browse/QTBUG-35298
> > >
> > > —
> > > Christian
> > > _______________________________________________
> > > Android-development mailing list
> > > Android-development at qt-project.org
> > > http://lists.qt-project.org/mailman/listinfo/android-development
> >
> > I confirm Cristian's version.
> > android.hardware.Camera.Area inner class exists only on API Level 14+
> > (that is Android 4.+), so trying to load it on the earlier Android
> > versions will lead to exception for sure.
>
> _______________________________________________
> Android-development mailing list
> Android-development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/android-development

Hi,

Yes, it fail because it's not able to resolve the name (Even though the class exists). In this particular case it becomes fatal on android < 4.4. I have updated the bug report with a link to the patch in gerrit.

__
Christian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/android-development/attachments/20131202/a2b04513/attachment.html>


More information about the Android-development mailing list