Impact of Android Customizations by device manufacturers - android

I am trying to write an android application that uses several of the android apis(like policy manager, package manager, wifi apis etc).
The concern i have is, android being open, manufacturers/carriers are free to take any specific version of android as their start point and customize the same and ship it with the device.
Note:Please excuse me if this post is in anyway a repeat of earlier posts on the same/similar topic. In such a case, appreciate anyone sharing the earlier post.
Few things that bother me are:
Does android enforce/require manufacturers/carriers to retain the default apis and only over-ride/customize the look-and-feel?
even if manufacturers change the implementation/behavior of the basic apis that comes from android, do they adhere to the interfaces so that my code doesnt break?
how do i ensure/test that my code works on all of the android devices since there is a possibility that one or more customizations could break my whole application?
I know these are some naive questions for many of you who may have been on android for a while, but any pointers in this regard would be of immense help.
Any other information in general w.r.t cross version, cross device incompatibilities and strategies to deal with them would be very helpful.
Thanks a lot in advance.
Regards,
Deepak

Your concerns (and many other developers) are addressed by: http://source.android.com/compatibility/index.html
But this still does not guarantee that manufacturer will not change API and break your application.
The common approach is to initially target subset of devices that make up large percentage of market and then implement workaround for other devices (if necessary). Sample info about device market penetration can be found at:
http://opensignalmaps.com/reports/fragmentation.php?
Kind regards,
Bo

First off, I don't believe you should need to worry about this. Only after you have thousands of users will you end up needing to face the more complex issues caused by the great number of manufacturers offering Android devices. This should not discourage you from developing for Android.
Does android enforce/require manufacturers/carriers to retain the default apis and only over-ride/customize the look-and-feel?
No. But it would certainly work against them if they remove important APIs from the system. The core exists as a whole, though there really isn't anything preventing them from removing or disabling chunks as they wish. For example, AT&T had disabled the ability to sideload apps on Android devices some time ago (but I don't think they still do that). An example of a device with reduced functionality: Amazon Kindle Fire. It doesn't at all look like Android in the majority of its interfaces (except within third-party apps) and it doesn't offer the complete API set. Even with those dramatic changes, Android app developers still have great success building and selling apps that run well on the Kindle Fire.
Even if manufacturers change the implementation/behavior of the basic apis that comes from android, do they adhere to the interfaces so that my code doesnt break?
That's the idea, but there isn't anything in place to forbid them from breaking things. Nor is there anything that will keep them from introducing bugs accidentally.
How do I ensure/test that my code works on all of the android devices since there is a possibility that one or more customizations could break my whole application?
I know that some manufacturers will offer an emulator for their devices/configurations to help test against their systems. For example, Motorola offers MOTODEV Studio for this purpose.

Related

Provision a fleet of Android devices automatically

I am looking for a way to initially setup a fleet of a couple of hundred Android tablets (setting the language, adding account, making settings in Play Store, activating GPS etc.)
What I have right now is an Android test that does various clicks (as a person would do) using uiautomator . It's kind of flaky but it works better than manually doing the setup.
What I want to do is somehow make the Android test as a standalone desktop application so that anyone in the team can provision the devices. But I do not know if it's possible or where to start.
Of course, if there is a better alternative that I haven't thought of, I am all ears.
Here is what I found to handle boarding and controlling a ton of devices.
SOTI MobiControl

How to test different Android OSs on physical hardware?

I wish to test my Android application against different versions of the Android OS on physical hardware. The need comes from testing interactions of my program with 3rd party hardware (barcode scanners).
In order to "switch" between Android OSs, I assume in order to "reimage" my phone, that I will have to root the phone then set the particular OS version with various images.
There seems to be much discussion on how to root the phones, however I'm curious if there is a easy/standard way to do this for developers (e.g. standard hardware which allows for this process to happen quickly/easily)? If not, how can I proceed?
Unfortunately, other than rooting your phone and flashing it w/ various OSs, you don't have a lot of options. My company keeps a tone of devices on hand running various different versions of android to address this exact challenge.
Otherwise, there are services out there that may be of help to you. Take a look at these:
http://www.deviceanywhere.com/
http://www.perfectomobile.com/
I'm sure there are others as well.
If it is just a testing of release candidate (not your BAU testing development), you may publish your app on Google Play as closed beta and then ask your friends (or some other community you trust) to play with the app.

How can I kill everything on my Android tablet except my app, and keep them all dead?

Please don't tell me what a bad idea this is. I am not using it as an Android tablet. It is the interface for a propitiatory medical system my company is designing. It's only function ever will be to control the system we are building.
That being said, how can I remove everything from the tablet and only run my app until the tablet dies or the standard firmware is reinstalled?
The tablet is being used exclusively as an interface control panel and CPU to my program which controls the medical equipment externally. I don't want anything else on the tablet. I don't want the users to do anything other than run my program on my equipment.
How can I lock the users into only using my program for the life of the tablet?
(I am building a system that happens to use an Android tablet to control it. Basically, I thought it would be easier to use a tablet, rather than design from scratch a system based on one or more microprocessors and which uses a custom designed and built color interface panel. If the doctors want to use an Android tablet for their offices, they are welcome to buy one.)
Thank you in advance.
Thank you all for your advice.
You will have to build your own version of Android if you wish to do this. For several reasons it is not possible to make an application that will do what you want and have it work on consumer devices.
Exactly how you need to go about customizing the OS build is going to depend on your exact hardware. But the simplest modifications will be removing the unneeded apk files from system/app/ and data/app/
AOSP and XDA-Developers are two great resources for learning the ins and outs of building a custom ROM.
If the device has reasonable power to it, you shouldn't need to worry about background processes.
If this is a consumer product, then it probably has the Google Apps suite and other related items, in which case rooting it and not installing those would be the best route. AOSP only runs processes that it needs to run Android out of the box.
Edit: You might just write the apps a Launcher and not allow opening other apps as the best route to accomplishing your goals.
You might need a custom ROM. It really depends on what version of Android your device supports. Check out the last in the list below.
http://www.redmondpie.com/best-most-popular-custom-roms-for-android-and-why-you-should-try-them-out/
I'm facing similar obstacles utilizing my business tablets. I want to restrict all the pre-loaded applications & only allow the tablet to be utilized for certain applications. White listed websites & such. I wonder if a 3rd party service such as ZENPRISE might offer a mobile management system that would take care of this for me?
zenprise

How does a solo/small group of developers test on multiple devices?

First off, sorry if this is too subjective, I just didnt know how else/where to ask.
Anyway, in the light of all my recent questions, I'm getting ready to release an Android app soon, and most of the testing has been done on my phone, the Droid. I really dont have the money to test on "multiple" devices, nor do I know anyone with an older phone that I could ask for help that would possibly get any kind of bug. Not to mention, when I do get a bug report, how would I go about fixing it for that particular phone without having to buy it to make sure it actually gets fixed, or that the person didnt just came across a one-time freakish accident of a glitch?
How do you guys solve these kinds of issues?
You can test the vast majority of issues via the emulator:
Check out this data on platform versions and screen sizes to get an idea of what configurations you should test for.
Based on that data, I'd test at least one configuration with API versions 1.5, 1.6 and 2.1, and versions with medium and high density resolutions.
If you wanted to test physical devices, I would guess that the G1 and the Droid would be the top two... G1 would give you the lower API versions, and Droid would give you the 2.1.
Depending on your application that may be sufficient. Applications that make heavy use of OpenGL extensions might need to test further, since that is the area where there is the most difference from device to device. I don't think that the emulator is sufficient for that. See this thread on the differences.
Other than that, I would just send out a demo version of the app to a few friends or an appropriate forum. If you find problems once you launch, collecting log data from users having problems can be very helpful. I wouldn't worry too much about device specific problems though, I don't think they are that common.
Disclaimer: I'm a Motorola employee in our developer services team. I don't speak for other OEMs.
Cover the range of devices that are enumerated in the "supports-screen" manifest element. Also, take into consideration when compatibility is mode on and off. Screen sizes and market filters seem to me to be the biggest things that trip developers up. Some of this you can test with the emulator and others you need real hardware.
OEMs provide SDK "addons" that allow you to run emulator images with the skin and screen size/density of their devices. Download addons from the OEM's developer sites. Motorola's addons are available at developer.motorola.com. HTC and Samsung do the same.
A commercial alternative is Mob4Hire. They have real people on real networks who can test your app for you.
Good luck
I have few friends wich have different android devices. Before app publishing I give it to them for tests. Sometimes any users submit bugreports to market, sometimes sends it to you by email. There is impossible to have all android devices and test own app on it. This is ok.
It might be worth having a look somewhere specialist such as http://www.xda-developers.com/
They've got a sizeable community there of reasonably knowledgeable people and its not uncommon to see people posting betas of apps there for consumption and feedback. There are also dedicated subforums for each phone which may assist when attempting to resolve problems on certain handsets.

In J2ME and Android which one is more useful, useable and popular as mobile programming language or framework? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am very interested in mobile application development. But which language or framework is more popular, useful and usable?
I know Java well. If you have any idea and/or experience, please help me to take my decision.
J2ME is much more popular than Android - many phones of many vendors (Nokia, Sony Ericson, Motorola, LG, Samsung and more) have it, and you can deploy application to them. The price is limited capabilities and no consolidated distribution channel (for the moment, Sun is talking about the Java Store).
On the other hand, Andriod has much more capabilities, its API is closer to the Java API, and it has more capabilities, but there is a limited number of phones. Also, you have the Android market as a distribution channel.
If you can describe what you have in mind, I can elaborate more.
Added Information
The J2ME market is quite large, but Android is rising fast - it is a true smartphone, a segment which has become more and more popular in the recent years. According to job trends, both are have roughly the same demand now:
I've dabbled in some J2ME programming, but right now I've written about 4 Android apps.
My observations:
The Android API is a lot of fun to use. J2ME is showing its age. For example, a JSON parser is built in. And you have access to SQLite. Android's SQLite access code is like an amalgam of lessons learnt from Ruby on Rails, REST and plain-old SQL.
In terms of deployment numbers, there are more J2ME apps than Android apps. However if you want to enter the smartphone market, Android is second in mindshare to iPhone (BlackBerry is reinventing itself, but its API is still looking like a J2ME++). Read this article.
The whole platform is open source. So learning it and mastering it is easy.
I think you're missing an important fact: Android is not only a platform, but also brings with it a fully fledged application framework which continues to grow and gets backing from some very big players (Open Handset Alliance). J2ME is just a stripped down version of the Java platform. That's a major difference.
Having worked with Android since over a year now, I can definitely say that is has grown into a very powerful system and decent tool support.
Only Android Can Catch the iPhone
There are something like 20 Android phones coming out before the end of the year.(*)
Networks like Verizon that ship only deliberately-crippled handsets will be hard-pressed to win sophisticated consumers. Their customers mostly make voice calls and text each other, to get fancy they might run Song ID or VZ Navigator.
I think the issue is: which phone owners actually d/l and use the apps? The walled-off Verizon customers, not so much. Right now, the action is in the iPhone, but I think Android might catch up.
(*) Here is just one.
I have to agree with others on shying away from J2ME development. I have a Motorola RAZR V3xx that I've used for a few years. It is as standard a J2ME-supporting phone as you're likely to get from most carriers. I decided to look into doing some J2ME development for the phone to give myself some helpful utilities.
Long story short, there is a reason you pretty much only see games on J2ME phones. Unless you are willing/able to shell out big bucks for signing certificates, you cannot even access the most useful APIs available on the phone. Things like File IO, PIM (contacts, calendar), Bluetooth, etc. are simply blocked unless you get your application signed using a carrier's (AT&T, T-Mobile, Sprint, Verizon, etc.) special certificate. And the cost of these certificates can easily exceed hundreds or thousands of dollars. Putting this simply out of the range of your average hobbyist.
I could go on, but a couple of sites have covered this topic in much greater detail Here and Here.
For me, this pretty much means I will be targeting the Android in the future. The iPhone is also a good place to be targeting. The current state of J2ME on handsets here in the U.S. is just not worth my time for pet projects. Which is disappointing, as most of these phones are capable of doing many useful things otherwise.
It depends on what you mean by 'popular'. If you are counting in terms of installed handsets, then J2ME wins hands down. As far as current installed handsets, Android has few mobile phone companies and only recent mobile phones (whereas J2ME has been around for the last six odd years).
However, that doesn't make working with J2ME a nice-to-have. Sadly, each manufacturer cripples it in some way, and not all phones with the J2ME badge are equal; some are more equal than others. MIDP, MIDP2.0, CLDC, CDC ... the list of acronyms goes on. And when you buy a phone, it has 'Java enabled' without actually saying what it is that it supports, so even the customer doesn't have a clue.
Despite its large installed base, J2ME remains fundamentally unpowered for the world's current generation of mobile phones; the upgrade path is usually non-existent (though it's the manufacturers to blame for that, unfortunately) and you can't even do things like access Bluetooth or contacts in any useful way; though extensions have been proposed for J2ME, they've never really lived up to the expectation of write-once-run-anywhere.
Whether Android goes down this route as well remains to be seen - the biggest concern is manufacturers are trying to 'do their own thing' (e.g. Motorolla's BLUR UI) which will further fragment the market.
Lastly, don't forget that it's in the handset manufacturer's interests for you to throw away your old phone and buy a new one every year (or two). Support, bug-fixes, and generally upgrading your old phone's software, though technically feasible, never happens. I had a P990, and despite a few rounds of updates, it remained as buggy as hell (which is why I ditched it for the iPhone when it came out).
So, from a programming perspective, Android is better than J2ME. For reaching many handsets, J2ME is better than Android. For general user interface and power, choose an iPhone.
Android and J2ME aren't exactly similar in their scope as platforms, in a way, it's like comparing apples and oranges.
When we talk about Android, we are talking about full-blown mobile OS, with much more extended capabilities than J2ME. It could be used for pretty much everything you can think about - system utilities, social network services, location-based apps, games, etc. Android has also richer UI kit and lots of available source code to learn from.
In Android you have access to many APIs, designed to be used in modern smartphones, and these APIs are being refined constantly, while J2ME has started to feel aged, and is concentrated mostly on graphics.
The penetration rate of J2ME is currently bigger than Android's, and by bigger I mean much, much bigger, but business analysis doesn't end just with number of handsets of the given platform.
If you have idea for a great app, you'd better do it for Android and/or iPhone OS - it will be easier for you and you'll be reaching to users that are more likely to need such app, and that are more likely to pay reasonable price for it.
Overall, I would recommend to start with the newer platform, even if only because it would be more interesting and a better learning experience for you.
While there is no shortage of 'feature-phones' supporting j2me in the wild, I suspect third party applications get very little market 'traction' because the users aren't looking to install new software on the phone.
Android is a breeze to develop for. I think you should try it.
There is no harm in getting the SDK and experimenting for a few hours..
J2ME is very popular because almost every phone can run these applications.
Android on the other side has just few phones and netbooks supported, but Android API/SDK is more powerful than J2ME. Android phones come with great hardware and you'll have the opportunity to work with all these "cool" touch screens, gps, accelerometers, etc. It's still in development, but I think it has a future.
From my point of view, Android is more and more better than the J2ME
Learn Android and enjoy... we have lot of fun while developing the Android apps
J2ME apps look and feel and development environment not effective compare with the Android
J2ME is the most popular. Because many mobile phones have a support for J2ME. J2ME's main advantage is that it belongs to the Java family, it is open source and widely supported by various kinds of devices.
Many mobile phones and other devices support J2ME due to its simplicity, easy to implement, etc.
The J2ME is the base for Blackberry,Android,etc.Because the others (other than J2ME) are developed after the J2ME.After eliminating the tough concepts in j2me,using some j2me concepts they build their environment like android,blackberry,etc.
J2ME is very old .It have many drawbacks,limitations,etc.
These drawbacks are overcomed in the latest technology like android,blackberry,etc.
J2me is good .It is old.It have many disadvantages,etc
Android overcome that disadvantages.Android keep on growing
The general java feature "platform independent" is failed sometimes,some scenarios in J2ME.
Android is new technology.It have many features,etc than J2ME.
Developing an application for android devices is simple,easy,etc.
We need ot get the pay liscence for developing application and deploying (applications) into the device.
The android SDK is obtained by free versions.
My opinion is Android is better than J2ME.

Categories

Resources