I wasn't quite sure if you meant change to this...

    <AndroidSupportedAbis>armeabi-v7a,armeabi</AndroidSupportedAbis>

Or change to this:

    <AndroidSupportedAbis>armeabi-v7a</AndroidSupportedAbis>

Or does it matter.

Also, while this change doesn't seem to have any adverse effects on my newer
test tablets and phones, will this change present any issues with current
users getting our updated code; but, still running on much older phones?


Thanks,

Steve Sharrock
Architecture/Design/Programming
www.sharkcode.com

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Jonathan Pryor
Sent: Thursday, September 27, 2012 11:32 AM
To: Discussions related to Mono for Android
Subject: [mono-android] PSA: Properly supporting ARM Devices

Summary:

The armeabi runtime is not thread safe. For the sanity of yourselves (as
developers) and of your users, please, with utmost speed, update your .apk's
to do one of the following:

 1. Only include the armeabi-v7a runtime, NOT the armeabi runtime.
 2. Manually update your .csproj file so that the <AndroidSupportedAbis/>
element lists armeabi-v7a before armeabi:
        https://bugzilla.xamarin.com/show_bug.cgi?id=7013#c15

Documentation:

        http://docs.xamarin.com/android/advanced_topics/CPU_Architecture

Background:

Life...is complicated.

A long time ago, there was armeabi (ARMv5) and armeabi-v7a (ARMv7). Most
devices are ARMv5, a few were ARMv7, and the only real difference between
the two were hardware floating point support and SMP support.

At that time there were few SMP phones, so the lack of SMP support in ARMv5
libraries was...undesirable, but not terrible, given the rarity of SMP
devices:

        https://bugzilla.xamarin.com/show_bug.cgi?id=281

We fixed this so that the armeabi (ARMv5) runtime would function on ARMv7
SMP devices by using the sched_setaffinity() Linux call to tie the process
to a single core, thus preventing "real" multithreading within the process.
The fix was good enough for me to run a test app for several hours on my
Xoom running Android 3.x (it would normally crash within a minute), so it
appeared to be fixed and was first released in Mono for Android 4.0:

        
http://docs.xamarin.com/android/Releases/Mono_For_Android_4/Mono_For_Android
_4.0.0#Bug_Fixes

Unfortunately, we're human, so we inadvertently removed that support in the
4.2.0 release; oops:

        https://bugzilla.xamarin.com/show_bug.cgi?id=6654#c5

Then things get...rather more complicated. The sched_setaffinity()-based fix
which worked in Android 3.x didn't work on Android 4.0:

        https://bugzilla.xamarin.com/show_bug.cgi?id=7013

I'm still not sure why it doesn't work anymore, but without the
sched_setaffinity() fix a proper fix is...rather more complicated, and
hasn't been completed yet. Consequently, at this time (and for the
foreseeable future) you CANNOT reliably use the armeabi runtime on SMP
devices...which constitutes pretty much every "advanced" Android device on
the market today, afaict. (Perhaps some of the free phones still have a
single core... Some actual numbers would be interesting.)

So for the sanity of all involved, please include the armeabi-v7a runtime
with your app.

Unfortunately, on Android 4.0-4.0.3, adding the armeabi-v7a runtime isn't
enough. Due to an Android bug, in some circumstances Android will install
armeabi native libraries even when armeabi-v7a native libraries are present
in the .apk:

        http://code.google.com/p/android/issues/detail?id=25321

This is...unfortunate, because a primary reason to want the armeabi-v7a
runtime is so that things will function _properly_ on those devices, and
Android is not being helpful.

Fortunately, there's a workaround. Unfortunately, it'll only help for
libmonodroid.so, not any other native libraries that are included with your
app, and the workaround requires manually editing your .csproj:

        https://bugzilla.xamarin.com/show_bug.cgi?id=7013#c15

A better implementation of the workaround will be in the forthcoming Mono
for Android 4.2.8 release, which will add libraries to the .apk so that the
armeabi-v7a version is added to the .apk before the armeabi version, thus
appeasing Android 4.0-4.0.3.

 - Jon

_______________________________________________
Monodroid mailing list
[email protected]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid


_______________________________________________
Monodroid mailing list
[email protected]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to