Android software development
Official development tools
|Initial release||October 2009|
26.1.1 / September 2017
The Android software development kit (SDK) includes a comprehensive set of development tools. These include a debugger, libraries, a handset emulator based on QEMU, documentation, sample code, and tutorials. Currently supported development platforms include computers running Linux (any modern desktop Linux distribution), Mac OS X 10.5.8 or later, and Windows 7 or later. As of March 2015[update], the SDK is not available on Android itself, but software development is possible by using specialized Android applications.
Until around the end of 2014, the officially-supported integrated development environment (IDE) was Eclipse using the Android Development Tools (ADT) Plugin, though IntelliJ IDEA IDE (all editions) fully supports Android development out of the box, and NetBeans IDE also supports Android development via a plugin. As of 2015, Android Studio, made by Google and powered by IntelliJ, is the official IDE; however, developers are free to use others, but Google made it clear that ADT was officially deprecated since the end of 2015 to focus on Android Studio as the official Android IDE. Additionally, developers may use any text editor to edit Java and XML files, then use command line tools (Java Development Kit and Apache Ant are required) to create, build and debug Android applications as well as control attached Android devices (e.g., triggering a reboot, installing software package(s) remotely).
Enhancements to Android's SDK go hand-in-hand with the overall Android platform development. The SDK also supports older versions of the Android platform in case developers wish to target their applications at older devices. Development tools are downloadable components, so after one has downloaded the latest version and platform, older platforms and tools can also be downloaded for compatibility testing.
Android applications are packaged in .apk format and stored under
/data/app folder on the Android OS (the folder is accessible only to the root user for security reasons). APK package contains .dex files (compiled byte code files called Dalvik executables), resource files, etc.
Android SDK Platform Tools
The Android SDK Platform Tools are a separately downloadable subset of the full SDK, consisting of command-line tools such as
Android Debug Bridge (ADB)
The Android Debug Bridge (ADB) is a tool to run commands on a connected Android device. The
adbd daemon runs on the device, and the
adb client starts a background server to multiplex commands sent to devices. In addition to the command-line interface, numerous graphical user interfaces exist to control adb.
The format for issuing commands is typically:
adb [-d|-e|-s <serialNumber>] <command> where -d is the option for specifying the single USB-attached device, -e for the single running Android emulator on the computer, -s for specifying a USB-attached device by its unique serial number. If there is only one attached device or running emulator, these options are not necessary.
In a security issue reported in March 2011, ADB was targeted as a vector to attempt to install a rootkit on connected phones using a "resource exhaustion attack".
Fastboot is a protocol and it has a tool with the same name included with the Android SDK package used primarily to modify the flash filesystem via a USB connection from host computer. It requires that the device be started in a boot loader or Secondary Program Loader mode, in which only the most basic hardware initialization is performed. After enabling the protocol on the device itself, it will accept a specific set of commands sent to it via USB using a command line. Some of the most commonly used fastboot commands include:
- flash – rewrites a partition with a binary image stored on the host computer.
- erase – erases a specific partition.
- reboot – reboots the device into either the main operating system, the system recovery partition or back into its boot loader.
- devices – displays a list of all devices (with the serial number) connected to the host computer.
- format – formats a specific partition; the file system of the partition must be recognized by the device.
|Initial release||June 2009|
r21b / April 2020
|Written in||C and C++|
|Platform||IA-32 (Windows only) or x86-64 (Windows, macOS and Linux)|
Code written in C/C++ can be compiled to ARM, or x86 native code (or their 64-bit variants) using the Android Native Development Kit (NDK). The NDK uses the Clang compiler to compile C/C++. GCC was included until NDK r17, but removed in r18 in 2018.
Command-line tools can be compiled with the NDK and installed using adb.
Android uses Bionic as its C library, and the LLVM libc++ as its C++ Standard Library. The NDK also includes a variety of other APIs: zlib compression, OpenGL ES or Vulkan graphics, OpenSL ES audio, and various Android-specific APIs for things like logging, access to cameras, or accelerating neural networks.
The NDK includes support for CMake and its own
ndk-build (based on GNU Make). Android Studio supports running either of these from Gradle. Other third-party tools allow integrating the NDK into Eclipse and Visual Studio.
Android Open Accessory Development Kit
The Android 3.1 platform (also backported to Android 2.3.4) introduces Android Open Accessory support, which allows external USB hardware (an Android USB accessory) to interact with an Android-powered device in a special "accessory" mode. When an Android-powered device is in accessory mode, the connected accessory acts as the USB host (powers the bus and enumerates devices) and the Android-powered device acts as the USB device. Android USB accessories are specifically designed to attach to Android-powered devices and adhere to a simple protocol (Android accessory protocol) that allows them to detect Android-powered devices that support accessory mode.
External hardware development
Android Developer Challenge
The Android Developer Challenge was a competition to find the most innovative application for Android. Google offered prizes totaling 10 million US dollars, distributed between ADC I and ADC II. ADC I accepted submissions from January 2 to April 14, 2008. The 50 most promising entries, announced on May 12, 2008, each received a $25,000 award to further development. It ended in early September with the announcement of ten teams that received $275,000 each, and ten teams that received $100,000 each.
ADC II was announced on May 27, 2009. The first round of the ADC II closed on October 6, 2009. The first-round winners of ADC II comprising the top 200 applications were announced on November 5, 2009. Voting for the second round also opened on the same day and ended on November 25. Google announced the top winners of ADC II on November 30, with SweetDreams, What the Doodle!? and WaveSecure being nominated the overall winners of the challenge.
There is a community of open-source enthusiasts that build and share Android-based distributions (i.e. firmware) with a number of customizations and additional features, such as FLAC lossless audio support and the ability to store downloaded applications on the microSD card. This usually involves rooting the device. Rooting allows users root access to the operating system, enabling full control of the phone. Rooting has several disadvantages as well, including increased risk of hacking, high chances of bricking, losing warranty, increased virus attack risks, etc. It is also possible to install custom firmware, although the device's boot loader must also be unlocked. Custom firmware allows users of older phones to use applications available only on newer releases.
Those firmware packages are updated frequently, incorporate elements of Android functionality that haven't yet been officially released within a carrier-sanctioned firmware, and tend to have fewer limitations. CyanogenMod and OMFGB are examples of such firmware.
On September 24, 2009, Google issued a cease and desist letter to the modder Cyanogen, citing issues with the re-distribution of Google's closed-source applications within the custom firmware. Even though most of Android OS is open source, phones come packaged with closed-source Google applications for functionality such as the Google Play and GPS navigation. Google has asserted that these applications can only be provided through approved distribution channels by licensed distributors. Cyanogen complied with Google's license and continued to distribute its mod without the proprietary software. It provided a method to backup licensed Google applications during the mod's install process and restore them when the process is complete.
Obstacles to development include the fact that Android does not use established Java standards, that is, Java SE and ME. This prevents compatibility between Java applications written for those platforms and those written for the Android platform. Android reuses the Java language syntax and semantics, but it does not provide the full class libraries and APIs bundled with Java SE or ME. However, there are multiple tools in the market from companies such as Myriad Group and UpOnTek that provide Java ME to Android conversion services.
Android provides its own GUI classes, and does not provide Java AWT, Swing or JavaFX. It does not support the full Java Beans API.
Android was created by the Open Handset Alliance, which is led by Google. The early feedback on developing applications for the Android platform was mixed. Issues cited include bugs, lack of documentation, inadequate QA infrastructure, and no public issue-tracking system. (Google announced an issue tracker on January 18, 2008.) In December 2007, MergeLab mobile startup founder Adam MacBeth stated, "Functionality is not there, is poorly documented or just doesn't work... It's clearly not ready for prime time." Despite this, Android-targeted applications began to appear the week after the platform was announced. The first publicly available application was the Snake game.
A preview release of the Android SDK was released on November 12, 2007. On July 15, 2008, the Android Developer Challenge Team accidentally sent an email to all entrants in the Android Developer Challenge announcing that a new release of the SDK was available in a "private" download area. The email was intended for winners of the first round of the Android Developer Challenge. The revelation that Google was supplying new SDK releases to some developers and not others (and keeping this arrangement private) led to widely reported frustration within the Android developer community at the time.
On August 18, 2008, the Android 0.9 SDK beta was released. This release provided an updated and extended API, improved development tools and an updated design for the home screen. Detailed instructions for upgrading are available to those already working with an earlier release. On September 23, 2008, the Android 1.0 SDK (Release 1) was released. According to the release notes, it included "mainly bug fixes, although some smaller features were added." It also included several API changes from the 0.9 version. Multiple versions have been released since it was developed.
On December 5, 2008, Google announced the first Android Dev Phone, a SIM-unlocked and hardware-unlocked device that is designed for advanced developers. It was a modified version of HTC's Dream phone. While developers can use regular consumer devices to test and use their applications, some developers may choose a dedicated unlocked or no-contract device.
As of July 2013[update], more than one million applications have been developed for Android, with over 25 billion downloads. A June 2011 research indicated that over 67% of mobile developers used the platform, at the time of publication. Android smartphone shipments are forecast to exceed 1.2 billion units in 2018 with an 85% market share.
- "The Android Source Code". Source.Android.com. Retrieved February 2, 2017.
- Syed H (September 24, 2012). "Editorial: Why You Should Go Nexus". Droid Lessons. Archived from the original on February 18, 2017. Retrieved April 17, 2013.
- "Application Fundamentals". Android Developers.
- "SDK Tools | Android Developers". Developer.android.com. Retrieved April 25, 2018.
- "Tools Overview". Android Developers. July 21, 2009.
- appfour. "AIDE- IDE for Android Java C++ - Android Apps on Google Play". google.com.
- gesturedevelop. "Java Editor - Android Apps on Google Play". google.com.
- Tanapro GmbH, Tom Arn. "JavaIDEdroid - Android Apps on Google Play". google.com.
- "IntelliJ Android Development". Retrieved September 19, 2012.
- "NBAndroid Plugin". Retrieved September 19, 2012.
- "Android Studio".
- Westfall, Jon (August 25, 2009). "Backup & Restore Android Apps Using ADB". JonWestfall.com. Retrieved December 7, 2009.
- "SDK Tools release notes". Android Developers.
- "Glossary". Android Developers.
- "Android Debug Bridge | Android Developers" Accessed December 27, 2012
- Jack Wallen (March 6, 2015). "How to create a full backup of your Android device without root". Retrieved January 29, 2016.
- Lemos, Robert "Open source vulnerabilities paint a target on Android"
- "Fastboot Protocol Documentation". android.googlesource.com. Retrieved July 7, 2019.
- Ravenscraft, Eric (June 13, 2014). "The Most Useful Things You Can Do with ADB and Fastboot on Android". Lifehacker. Retrieved July 7, 2019.
- "Android NDK | Android Developers". Developer.android.com. November 13, 2012. Retrieved March 13, 2014.
- "NDK Downloads | Android Developers". developer.android.com. Retrieved April 24, 2018.
- Srinivas, Davanum (December 9, 2007). "Android — Invoke JNI based methods (Bridging C/C++ and Java)". Archived from the original on December 16, 2008. Retrieved December 13, 2008.
- "java.lang.System". Android Developers. Retrieved September 3, 2009.
- "Android Debug Bridge (adb)".
- "Android NDK Native APIs | Android NDK".
- "Using Eclipse for Android C/C++ Development". January 23, 2011.
- "Using Visual Studio to Develop Native Android Code – VisualGDB Tutorials".
- "Simpleperf | Android NDK".
- "Accessory Development Kit | Android Developers guides". Developer.android.com. Retrieved October 2, 2012.
- Chen, Jason (May 12, 2008). "The Top 50 Applications". Android Developers Blog. Archived from the original on September 25, 2009. Retrieved September 4, 2009.
- Brown, Eric (May 13, 2008). "Android Developer Challenge announces first-round winners". Linux for Devices. Archived from the original on May 14, 2008.
- "ADC I Top 50 Gallery". Android Developer Challenge. Retrieved May 19, 2009.
- "Android Developer Challenge". Google Code. Retrieved January 11, 2008.
- Chu, Eric (October 6, 2009). "ADC 2 Round 1 Scoring Complete". Android Developers Blog. Archived from the original on November 1, 2009. Retrieved November 3, 2009.
- "ADC 2 Overall Winners". Android Developer Challenge. Archived from the original on January 4, 2011. Retrieved December 5, 2010.
- Kharif, Olga (November 30, 2009). "Android Developer Challenge 2 Winners Announced". BusinessWeek. Retrieved December 5, 2010.
- "Dream android development". xda-developers forum. Retrieved September 11, 2009.
- "Rooting: Advantages and Disadvantages". ITCSE forum. Archived from the original on November 29, 2014. Retrieved September 21, 2013.
- "Android 2.1 from Motorola Droid Ported to G1". Volt Mobile. March 10, 2010. Archived from the original on May 31, 2011. Retrieved May 13, 2011.
- Wimberly, Taylor (September 24, 2009). "CyanogenMod in trouble?". Android and me. Archived from the original on October 3, 2009. Retrieved September 26, 2009.
- Morrill, Dan (September 25, 2009). "A Note on Google Apps for Android". Android Developers Blog. Archived from the original on October 25, 2009. Retrieved September 26, 2009.
- "The current state..." CyanogenMod Android ROM. September 27, 2009. Archived from the original on November 3, 2009. Retrieved September 27, 2009.
- van Gurp, Jilles (November 13, 2007). "Google Android: Initial Impressions and Criticism". Javalobby. Retrieved March 7, 2009.
Frankly, I don't understand why Google intends to ignore the vast amount of existing implementation out there. It seems like a bad case of "not invented here" to me. Ultimately, this will slow adoption. There are already too many Java platforms for the mobile world and this is yet another one
- "Myriad's New J2Android Converter Fuels Android Applications Gold Rush". March 19, 2010. Archived from the original on July 4, 2011. Retrieved May 13, 2011.
- Fruhlinger, Josh (March 23, 2010). "J2Android hopes you don't know that Android is Java-based". JavaWorld. Retrieved 2020-07-13.
On the other hand, you might think this is kind of a scam aimed at developers who don't really understand the nature of the platform they're targeting. My biggest complaint is that you'd think that Mikael Ricknäs, the IDG News Service reporter who wrote the first story linked to above (who toils for the same company that publishes JavaWorld), would have at least mentioned the relationship between Java and Android to make the oddness of this announcement clear.
- Fruhlinger, Josh (March 31, 2010). "Myriad CTO: J2Android moves MIDlets to "beautiful" Android framework". JavaWorld. Retrieved 2020-07-13.
We will have to wait and see exactly how much pickup J2Android actually sees. The tool isn't actually available on the open market just yet; while Schillings spoke optimistically about "converting 1,000 MIDlets in an afternoon," at the moment they're working with a few providers to transform their back catalogs. So those of you out there hoping to avoid learning how to write Android code may have to wait a while.
- Paul, Ryan (December 19, 2007). "Developing apps for Google Android: it's a mixed bag". Ars Technica. Archived from the original on December 20, 2007. Retrieved December 19, 2007.
- Morrill, Dan (January 18, 2008). "You can't rush perfection, but now you can file bugs against it". Android Developers Blog. Retrieved September 3, 2009.
- Morrison, Scott (December 19, 2007). "Glitches Bug Google's Android Software". The Wall Street Journal. Retrieved December 19, 2007.
- "Snake". Android Freeware Directory. Retrieved January 26, 2008.
- "First Android Application — Snake". Mobiles2day. November 14, 2007. Archived from the original on May 11, 2008. Retrieved January 7, 2008.
- Metz, Cade (July 14, 2008). "Google plays Hide and Seek with Android SDK". The Register. Archived from the original on October 6, 2008. Retrieved October 23, 2008.
- "Android — An Open Handset Alliance Project: Upgrading the SDK". Archived from the original on September 13, 2008. Retrieved October 24, 2008.
- "Other SDK Releases". Android Developers. Retrieved September 2, 2009.
- "SDK Archives". Android Developers.
- "Google Play Hits 1 Million Apps". Mashable. July 24, 2013.
- "Android App Stats". Archived from the original on January 2, 2011. Retrieved December 31, 2010.
- Leena Rao (April 14, 2011). "Google: 3 Billion Android Apps Installed; Downloads Up 50 Percent From Last Quarter". Techcrunch. Archived from the original on April 25, 2011. Retrieved May 13, 2011.
- "Developer Economics 2011". Archived from the original on September 29, 2013. Retrieved July 8, 2011.
- "Worldwide Smartphone Volumes Will Remain Down in 2018 Before Returning to Growth in 2019 and Beyond, According to IDC". idc.com. May 30, 2018. Retrieved June 6, 2018.
- Ed, Burnette (July 13, 2010). Hello, Android: Introducing Google's Mobile Development Platform (3rd ed.). Pragmatic Bookshelf. ISBN 978-1-934356-56-2.
- Ableson, Frank; Sen, Robi; King, Chris (January 2011). Android in Action, Second Edition (2nd ed.). Manning. ISBN 978-1-935182-72-6.
- Conder, Shane; Darcey, Lauren (July 24, 2012). Android Wireless Application Development Volume II: Advanced Topics (3rd ed.). Addison-Wesley Professional. ISBN 978-0-321-81384-8.
- Murphy, Mark (June 26, 2009). Beginning Android (1st ed.). Apress. ISBN 978-1-4302-2419-8.
- Meier, Reto (March 2010). Professional Android 2 Application Development (1st ed.). Wrox Press. ISBN 978-0-470-56552-0.
- Haseman, Chris (July 21, 2008). Android Essentials (1st ed.). Apress. ISBN 978-1-4302-1064-1.
- Clifton, Ian (August 3, 2012). The Essentials of Android Application Development LiveLessons (Video Training) (1st ed.). Addison-Wesley Professional. ISBN 978-0-13-299658-7.
|Wikibooks has a book on the topic of: Android|