[Android-development] JNI problem with nested classes

Denis Kormalev kormalev.denis at gmail.com
Mon Dec 2 21:01:07 CET 2013


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.




More information about the Android-development mailing list