Before you buy Android for Unity, ARMv6 and what you should know.
The purpose of this post is to inform potential Android developers of the issues they will face
when developing from Unity for Android.
ARM architecture:
About the processors phones use.
ARM architecture - Wikipedia, the free encyclopedia
ARMv? and why is it important?
Quite simply it is the Processor used in phones. It is important to note
that the differences between ARMv6 and ARMv7 is effiency and the ability
to run many things on your phone within an application. The difference is
substantial, doubled, and tripled in some cases.
Unity only publishes to ARMv7, and maybe ARMv6 with VFP (Vector Floating Point) phones.
How can you find this information?
It is listed here:
UNITY: Unity Web Player End User License
However it is NOT listed here:
UNITY: Android
How can we tell what phone is what?
Possibly the quickest answer to this question is: 4G = ARMv7+
You MIGHT be able to tell which phone is ARMv6 or v7 Here (Though I find it terribly confusing
and several phones that have been out for 6+ months aren't on this list):
ARM architecture - Wikipedia, the free encyclopedia
And you MIGHT be able to tell which phone is which here (Oddly enough thats at FireFox's Dev Site):
https://wiki.mozilla.org/Mobile/Platforms/Android#System_Requirements
What phones are currently the most accessable or most widly used by people in the market?
That is a good question and a hard one to answer. There doesn't seem to be a really simple
way to find out at the moment. Currently 01/11/2011 there are no less than 40 phones which
have been sold in the last year and are currently sold that all have ARMv6. A handful of these
have VFP. There are about 10 phones on the market, (some that have been available since October of 2010)
that are ARMv7, and 4 tablets. These are the 'latest and greatest' units and won't fully be integrated
into the market for another year at least.
Other than trying before buying all 40 of the ARMv6 phones, telling which ones will work with Unity,
the simplest
answer is the ARMv7 phones.
How long until those ARMv6 phones are no longer in the market bottle-necking our publishing?
ARM is all the way up to ARM11 and there is talk already of a phone being released with ARM9.
But our concern as developers is simply, "How much of the market can we rely upon that our
software will work?"
Typically it is better to develop for the largest common use consumer,
not the latest and greatest consumer who has to have the newest thing on the market.
That being said, all we can really do is attempt to gauge based on the availability of phones
to consumers.
HTC could be shipping 10 million 4G phones, so hopefully in a year those 10 million phones will be
in play.
Android Phones
In short, until those ARMv6 phones are pulled from availability to consumers, you have to project
that 2 years from the day they stop offering the ARMv6 phones is when the market will
start to balance more towards ARMv7 and above. This will take a while as alot of those phones that
are ARMv6, are offered for free to consumers! It's simple really, a consumer is going to go
after "Get a free smartphone" versus dropping 200+ dollars for the ARMv7 phone.
How can we tell our consumer, or can we detect which phone they are using so we don't generate
thousands of dis-satisfied potential customers?
Unfortuntly at this time there doesn't seem to be a method via the Android market to detect if the
phone is ARMv6 or 7 BEFORE they download your app. All you can really do is include it in your
description, alter the pop-up that they will receive when they try to run your app;
"Your Phone's hardware is incompatable, the app has been closed" (or something similar)
and hope to point them elsewhere and apologize for wasting thier time!
The wall I ran into with Unity
(Also known as "Don't make the same mistake I made!!")
It was in November that I made the decision to Purchase Unity and focus on Android development.
I performed what I beleived was the best dilligence in making sure I knew
every possible requirement for publishing to the Android.
Short of finding the Android page on Unity
UNITY: Android
The Engine Pages
UNITY: Unity 3 Engine Features
And all of the other pages linked when reading the website, I never encountered
the page that says specifically, to look for ARMv7.
UNITY: Unity Web Player End User License
Also Unity's setting was still set to the "Universal (experimental) option so my test app
'appeared' to be working just fine on any phone I tried.
I had run several smaller apps built in Eclipse as well as published directly my test app
to the emulator, again everything 'appeared' to be functioning just fine.
When I went to try and troubleshoot why sound wasn't working on the development test phone
was when I encountered the speed bump of ARMv6. After alot of google searches I finally
found a link to the system-requirements page of Unity within a forum posting:
Android Sound
This was uncovered as I was trying to trouble shoot as to why sound didn't work on my development model
but worked just fine on two other models I had access to. In fact, if the sound had worked
from the start, I would have never figured out the differences in ARM versions and why they would
matter.
As it happens, this was exactly 2 days after I was locked into keeping the phone that I received, the LG
Optimus S, and 7 days after purchasing full licensing for Unity & Android.
Talk about taking a punch to the face. Now I have a phone that is useless for my purposes
for the next two years!
So what's the deal?
The deal is I really like Unity, I adore the heck out of it. It's not only affordable
for artists and game designers, but it allows you to quickly and easily publish to multiple
platforms. To be frank it makes all other game engine options look silly. That being
said it's a no brainer on sticking with Unity. Mind you this is coming from someone who
first wrote in Basic on the Atari 2600 28 years ago.
The problem is, publishing via Unity to Android won't really be solid for another year because of the lack of ARMv7 phones in use. Consumers get
locked into 2 year contracts, in the same way I got locked in, and the most common will be
the free phones and the cheaper (50$) for the next 2 years. Without a way to dumbdown your app, or modify
the published one within Eclipse to work for ARMv6, that is potentially a GIANT chunk of current market
share which will be LOST to a Unity>Android developer.
It's kinda like saying "We've got the BEST breed of horse from the TOP Sires available, but we're
going to knock its back two legs off just before it leaves the gate. Don't worry it will run just
fine down the track."
To be fair however, Unity is making a good choice as the effiency of ARMv7 and above far outshines
the ineffiecncy of ARMv6, even with VFP. So the choice made here is to get the awesomeness of Unity
working with less headache. Thumbs up on that one.
How can we fix this?
Unity:
Unity's already taken a stand last October that they are focused On ARMv7.
A standing list that is easily accessible, in fact right here on this very page:
UNITY: Android
of a few things;
Stating ARMv7 only and linking to what ARMv7 is, its advantages (performs much much better, etc)
A list or a link to an active list of phones that are ARMv7+ and compatable.
A method to repackage your app via Eclipse or hooks that can be written by hand in the AndroidSDK for the
following:
Detect which ARM a consumer has during install (More on Android Market really)
Dumbing down your APP for ARMv6 (Maybe we can strip it?)
External linking to external scripts that will allow coding via the SDK before packaging by Unity. This
sounds like madness but what the heck.
Make Unity Sales Reps aware of this difference when a potential buyer calls. Several phone calls
and not a single sales rep even knew what ARM was at all.
Android Market:
We need to be able to check if our app will work on thier phone. That's it. If not we shuffle them
to an app that will work or apologize humbly and give them free smores.
Android Developers:
Really you would have to start from scratch and code your app from dirt to diamond and lose all of the
wonderful engine use from Unity to get your app working on ARMv6. It is possible, there are tons of apps
that work just fine on ARMv6 without VFP that have music, sound fx, and complex AI all running at the same
time. This option is to not use Unity but create your own engine, in effect. (OUCH!)
An example of this accomplishment would be Pocket Legends and thier SpaceTime Engine.
Spacetime Studios - News
Runs just fine on ARMv6 phones.
The Community:
Create a standing list of phones that are ARMv6 and ARMv7. The wikipedia page is confusing at best and
not up to date. Also finding a Firefox development website for such a list is kinda hinky.
Find out which Android phones are used the most and keep track of it. This is an ongoing project
and something I myself have to check daily to see if I can actually find anything of use.
Conclusion
Hopefully this posting will help guide folks better, prevent confusion, and help the android market grow
better. Onward and upward!
Where this is posted:
ARMv6 Android Support
(Yes Unity has already taken a stand on ARMv7+, but what the heck one can dream right?)
ARMv6 Android Support
Android Market ARM Detection
Allow Android Market to Detect ARM version before allowing download - Android Market Help
Before you buy Android for Unity, ARMv6 and what you should know.
@ Android Forums: (THIS PAGE)
http://androidforums.com/application-development/255511-before-you-buy-android-unity-armv6-what-you-
should-know.html#post2124617
Before you buy Android for Unity, ARMv6 and what you should know.
@ Unity for Android Forums:
<Pending Approval from a Unity Moderator>
The purpose of this post is to inform potential Android developers of the issues they will face
when developing from Unity for Android.
ARM architecture:
About the processors phones use.
ARM architecture - Wikipedia, the free encyclopedia
ARMv? and why is it important?
Quite simply it is the Processor used in phones. It is important to note
that the differences between ARMv6 and ARMv7 is effiency and the ability
to run many things on your phone within an application. The difference is
substantial, doubled, and tripled in some cases.
Unity only publishes to ARMv7, and maybe ARMv6 with VFP (Vector Floating Point) phones.
How can you find this information?
It is listed here:
UNITY: Unity Web Player End User License
However it is NOT listed here:
UNITY: Android
How can we tell what phone is what?
Possibly the quickest answer to this question is: 4G = ARMv7+
You MIGHT be able to tell which phone is ARMv6 or v7 Here (Though I find it terribly confusing
and several phones that have been out for 6+ months aren't on this list):
ARM architecture - Wikipedia, the free encyclopedia
And you MIGHT be able to tell which phone is which here (Oddly enough thats at FireFox's Dev Site):
https://wiki.mozilla.org/Mobile/Platforms/Android#System_Requirements
What phones are currently the most accessable or most widly used by people in the market?
That is a good question and a hard one to answer. There doesn't seem to be a really simple
way to find out at the moment. Currently 01/11/2011 there are no less than 40 phones which
have been sold in the last year and are currently sold that all have ARMv6. A handful of these
have VFP. There are about 10 phones on the market, (some that have been available since October of 2010)
that are ARMv7, and 4 tablets. These are the 'latest and greatest' units and won't fully be integrated
into the market for another year at least.
Other than trying before buying all 40 of the ARMv6 phones, telling which ones will work with Unity,
the simplest
answer is the ARMv7 phones.
How long until those ARMv6 phones are no longer in the market bottle-necking our publishing?
ARM is all the way up to ARM11 and there is talk already of a phone being released with ARM9.
But our concern as developers is simply, "How much of the market can we rely upon that our
software will work?"
Typically it is better to develop for the largest common use consumer,
not the latest and greatest consumer who has to have the newest thing on the market.
That being said, all we can really do is attempt to gauge based on the availability of phones
to consumers.
HTC could be shipping 10 million 4G phones, so hopefully in a year those 10 million phones will be
in play.
Android Phones
In short, until those ARMv6 phones are pulled from availability to consumers, you have to project
that 2 years from the day they stop offering the ARMv6 phones is when the market will
start to balance more towards ARMv7 and above. This will take a while as alot of those phones that
are ARMv6, are offered for free to consumers! It's simple really, a consumer is going to go
after "Get a free smartphone" versus dropping 200+ dollars for the ARMv7 phone.
How can we tell our consumer, or can we detect which phone they are using so we don't generate
thousands of dis-satisfied potential customers?
Unfortuntly at this time there doesn't seem to be a method via the Android market to detect if the
phone is ARMv6 or 7 BEFORE they download your app. All you can really do is include it in your
description, alter the pop-up that they will receive when they try to run your app;
"Your Phone's hardware is incompatable, the app has been closed" (or something similar)
and hope to point them elsewhere and apologize for wasting thier time!
The wall I ran into with Unity
(Also known as "Don't make the same mistake I made!!")
It was in November that I made the decision to Purchase Unity and focus on Android development.
I performed what I beleived was the best dilligence in making sure I knew
every possible requirement for publishing to the Android.
Short of finding the Android page on Unity
UNITY: Android
The Engine Pages
UNITY: Unity 3 Engine Features
And all of the other pages linked when reading the website, I never encountered
the page that says specifically, to look for ARMv7.
UNITY: Unity Web Player End User License
Also Unity's setting was still set to the "Universal (experimental) option so my test app
'appeared' to be working just fine on any phone I tried.
I had run several smaller apps built in Eclipse as well as published directly my test app
to the emulator, again everything 'appeared' to be functioning just fine.
When I went to try and troubleshoot why sound wasn't working on the development test phone
was when I encountered the speed bump of ARMv6. After alot of google searches I finally
found a link to the system-requirements page of Unity within a forum posting:
Android Sound
This was uncovered as I was trying to trouble shoot as to why sound didn't work on my development model
but worked just fine on two other models I had access to. In fact, if the sound had worked
from the start, I would have never figured out the differences in ARM versions and why they would
matter.
As it happens, this was exactly 2 days after I was locked into keeping the phone that I received, the LG
Optimus S, and 7 days after purchasing full licensing for Unity & Android.
Talk about taking a punch to the face. Now I have a phone that is useless for my purposes
for the next two years!
So what's the deal?
The deal is I really like Unity, I adore the heck out of it. It's not only affordable
for artists and game designers, but it allows you to quickly and easily publish to multiple
platforms. To be frank it makes all other game engine options look silly. That being
said it's a no brainer on sticking with Unity. Mind you this is coming from someone who
first wrote in Basic on the Atari 2600 28 years ago.
The problem is, publishing via Unity to Android won't really be solid for another year because of the lack of ARMv7 phones in use. Consumers get
locked into 2 year contracts, in the same way I got locked in, and the most common will be
the free phones and the cheaper (50$) for the next 2 years. Without a way to dumbdown your app, or modify
the published one within Eclipse to work for ARMv6, that is potentially a GIANT chunk of current market
share which will be LOST to a Unity>Android developer.
It's kinda like saying "We've got the BEST breed of horse from the TOP Sires available, but we're
going to knock its back two legs off just before it leaves the gate. Don't worry it will run just
fine down the track."
To be fair however, Unity is making a good choice as the effiency of ARMv7 and above far outshines
the ineffiecncy of ARMv6, even with VFP. So the choice made here is to get the awesomeness of Unity
working with less headache. Thumbs up on that one.

How can we fix this?
Unity:
Unity's already taken a stand last October that they are focused On ARMv7.
A standing list that is easily accessible, in fact right here on this very page:
UNITY: Android
of a few things;
Stating ARMv7 only and linking to what ARMv7 is, its advantages (performs much much better, etc)
A list or a link to an active list of phones that are ARMv7+ and compatable.
A method to repackage your app via Eclipse or hooks that can be written by hand in the AndroidSDK for the
following:
Detect which ARM a consumer has during install (More on Android Market really)
Dumbing down your APP for ARMv6 (Maybe we can strip it?)
External linking to external scripts that will allow coding via the SDK before packaging by Unity. This
sounds like madness but what the heck.
Make Unity Sales Reps aware of this difference when a potential buyer calls. Several phone calls
and not a single sales rep even knew what ARM was at all.
Android Market:
We need to be able to check if our app will work on thier phone. That's it. If not we shuffle them
to an app that will work or apologize humbly and give them free smores.
Android Developers:
Really you would have to start from scratch and code your app from dirt to diamond and lose all of the
wonderful engine use from Unity to get your app working on ARMv6. It is possible, there are tons of apps
that work just fine on ARMv6 without VFP that have music, sound fx, and complex AI all running at the same
time. This option is to not use Unity but create your own engine, in effect. (OUCH!)
An example of this accomplishment would be Pocket Legends and thier SpaceTime Engine.
Spacetime Studios - News
Runs just fine on ARMv6 phones.
The Community:
Create a standing list of phones that are ARMv6 and ARMv7. The wikipedia page is confusing at best and
not up to date. Also finding a Firefox development website for such a list is kinda hinky.
Find out which Android phones are used the most and keep track of it. This is an ongoing project
and something I myself have to check daily to see if I can actually find anything of use.
Conclusion
Hopefully this posting will help guide folks better, prevent confusion, and help the android market grow
better. Onward and upward!
Where this is posted:
ARMv6 Android Support
(Yes Unity has already taken a stand on ARMv7+, but what the heck one can dream right?)
ARMv6 Android Support
Android Market ARM Detection
Allow Android Market to Detect ARM version before allowing download - Android Market Help
Before you buy Android for Unity, ARMv6 and what you should know.
@ Android Forums: (THIS PAGE)
http://androidforums.com/application-development/255511-before-you-buy-android-unity-armv6-what-you-
should-know.html#post2124617
Before you buy Android for Unity, ARMv6 and what you should know.
@ Unity for Android Forums:
<Pending Approval from a Unity Moderator>