Site Sponsors:
Android, Eclipse & Ubuntu 

We Love NetBeans


My friends and I learned how to develop software for Android on NetBeans. -While far from the usual path taken to Android 'Nerdvanna, since we have started training on Android, we have been increasingly reverting back to bad habits. We have been using Eclipse.





Why dread teaching with Eclipse you might ask? -Because we have seen far too many students blow-away a weeks' weight of work while using it. --While admittedly just about all student ''disasters'' center around students tweaking their files and / or settings outside of the IDE (NEVER mess with anything in the workspace folders directly -bugs can sleep until a re-boot -even backups can fail to fix the problem!) --I'm just sayin' ... once burned, is twice shy... Ten time so roasted in front of a classroom could make even Johnny Carson a 'tad neurotic.

Yet in as much as only we old timers expect to treat files as stand-alone, given that the IDE is presently the opiate of the masses, what cannot be cured, must be endured. -After all, according to "Jafar's Golden Rule" - the customer is always right. ;-)





Not Galileo?


Certainly the first place to stop for a great overview of the Android SDK installation process - in general - would be at the Android Site.

Once we find ourselves merrily 'skipping down the Eclipse road to the emerald 'droid habitation, students are often keen to use a customized distro like Galileo.





While jump-start distros are great if you can start there from-scratch, most clients like to integrate the SDK into their existing tool-chain. Hence the need to document the integration process, ourselves. It makes a great how-to.

-Of course, if you need to install the ADK for another reason ('distro blows up on Windows, etc...) then we will assume a 'from scratch' here, too.

The Step-By-Step


So, beginning from step zero, we must jump to:

Step #1 - Get It


You will need:

(1) A Java Run-Time Environment (JRE).

Eclipse is a Java Application. It needs a JRE. So if not already installed, then you can get the JRE from Java.com. Stick with version 1.6 or greater.

Assuming that the JRE installed okay, you might - or might not - want to use Sun's SDK. Eclipse has its own.

Note to OS X Users: If you do not have Java 1.6 available, consider installing Ubuntu under Oracle's Virtual Box -You can get that here. --In fact, if you use more than one machine - be it a laptop at home, or a desktop at work - then everyone should install Android on Ubuntu using Virtual Box Software. Why? Because if you don't mind spending $99 for a pocket drive, then using a virtual machine is a great way to backup, as well as transplant gigabytes of work-in-progress from one place, to another.

(2) You will need a copy of Eclipse - we got mine from The Eclipse Site.

(3) You will also need The Android SDK - The archive is at the Android Download Page.

Step #2 - Installing Eclipse


Setting up Eclipse has always been easy: Once Java has been installed, all we need do is to open the Eclipse archive. After open, we can just drag, drop, and click on the eclipse file, in the eclipse folder.



Note: If Eclipse complains about not being able to find your Java, then note that some versions of Ubuntu have an extremely quirky problem with setting up your path... -Our pristine, updated, and properly-patched install-base on a 32 bit Lucid Lynx VM was one such version. -After too much howling frustration, after updating the path in $HOME/.profile we discovered that all we had to do was to re-boot for $PATH to 'take' to a new shell session... -Who knew?

Step #3 - The ADK


The Android SDK (ADK) is also a queer thing: While you just drag and drop it to install much like Eclipse, once we have done so, we need to run the SDK Management Tool before we can use the download to do much of anything:



See the README in the top ADK folder for instructions on how to see:



-Note that you will probably not want to install as many packages as depicted above -We do a lot of experiments with other platforms, so we installed 1.5, 2.2, 3.2 and 4.0. --When in doubt, 1.5 is the way to go if you have old hardware laying around. -That said however, 2.1 is probably what most folks will want to work with.

Step #4 - The ADK Plug-in Under Eclipse


Google has the poop here. It worked well.

Note that during the install that you will have to browse to select the location where you dropped the ADK (Step #3) proper. Because we also used the tools on NetBeans, we kept that ADK Folder next to - rather than inside of - the eclipse folder.

I was a bit surprised this time to see the plug-in re-download all of the platforms we had selected in Step #3, as well as to suggest the use of the 2.1 Platform. After being prompted, we installed Version 2.1, as well.

Ten dialogs & promptings later, here is what we saw:



Here is the log:


[2011-11-11 15:37:19 - SDK Manager] Fetching https://dl-ssl.google.com/android/repository/addons_list-1.xml
[2011-11-11 15:37:20 - SDK Manager] Validate XML
[2011-11-11 15:37:20 - SDK Manager] Parse XML
[2011-11-11 15:37:20 - SDK Manager] Fetched Add-ons List successfully
[2011-11-11 15:37:20 - SDK Manager] Fetching URL: https://dl-ssl.google.com/android/repository/repository-5.xml
[2011-11-11 15:37:21 - SDK Manager] Validate XML: https://dl-ssl.google.com/android/repository/repository-5.xml
[2011-11-11 15:37:21 - SDK Manager] Parse XML: https://dl-ssl.google.com/android/repository/repository-5.xml
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 1.1, API 2, revision 1 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 1.5, API 3, revision 4
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 1.6, API 4, revision 3
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 2.0, API 5, revision 1 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 2.0.1, API 6, revision 1 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 2.1, API 7, revision 3
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 2.2, API 8, revision 3
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 2.3.1, API 9, revision 2 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 2.3.3, API 10, revision 2
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 3.0, API 11, revision 2
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 3.1, API 12, revision 3
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 3.2, API 13, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found SDK Platform Android 4.0, API 14, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found ARM EABI v7a System Image, Android API 14, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 7, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 8, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 9, revision 1 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 10, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 11, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 12, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 13, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Samples for SDK API 14, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Android SDK Platform-tools, revision 9
[2011-11-11 15:37:21 - SDK Manager] Found Android SDK Tools, revision 15
[2011-11-11 15:37:21 - SDK Manager] Found Documentation for Android SDK, API 14, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Android Support package, revision 4
[2011-11-11 15:37:21 - SDK Manager] Fetching URL: https://dl-ssl.google.com/android/repository/addon.xml
[2011-11-11 15:37:21 - SDK Manager] Validate XML: https://dl-ssl.google.com/android/repository/addon.xml
[2011-11-11 15:37:21 - SDK Manager] Parse XML: https://dl-ssl.google.com/android/repository/addon.xml
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 3, revision 3
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 4, revision 2
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 5, revision 1 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 6, revision 1 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 7, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 8, revision 2
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 9, revision 2 (Obsolete)
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 10, revision 2
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 11, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 12, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 13, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Google APIs by Google Inc., Android API 14, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Google TV by Google Inc., Android API 12, revision 2
[2011-11-11 15:37:21 - SDK Manager] Found Google Market Licensing package, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Google USB Driver package, revision 4
[2011-11-11 15:37:21 - SDK Manager] Found Google Market Billing package, revision 1
[2011-11-11 15:37:21 - SDK Manager] Found Google Admob Ads Sdk package, revision 3
[2011-11-11 15:37:21 - SDK Manager] Found Google Webdriver package, revision 1
[2011-11-11 15:37:21 - SDK Manager] Fetching URL: http://www.echobykyocera.com/download/e ... sitory.xml
[2011-11-11 15:37:22 - SDK Manager] Validate XML: http://www.echobykyocera.com/download/e ... sitory.xml
[2011-11-11 15:37:22 - SDK Manager] Parse XML: http://www.echobykyocera.com/download/e ... sitory.xml
[2011-11-11 15:37:22 - SDK Manager] Found Dual Screen APIs by KYOCERA Corporation, Android API 8, revision 1
[2011-11-11 15:37:22 - SDK Manager] Found Dual Screen APIs by KYOCERA Corporation, Android API 10, revision 1
[2011-11-11 15:37:22 - SDK Manager] Fetching URL: http://developer.lgmobile.com/sdk/andro ... sitory.xml
[2011-11-11 15:37:23 - SDK Manager] Validate XML: http://developer.lgmobile.com/sdk/andro ... sitory.xml
[2011-11-11 15:37:23 - SDK Manager] Parse XML: http://developer.lgmobile.com/sdk/andro ... sitory.xml
[2011-11-11 15:37:23 - SDK Manager] Found Real3D by LGE, Android API 8, revision 1
[2011-11-11 15:37:23 - SDK Manager] Fetching URL: http://innovator.samsungmobile.com/andr ... sitory.xml
[2011-11-11 15:37:24 - SDK Manager] Validate XML: http://innovator.samsungmobile.com/andr ... sitory.xml
[2011-11-11 15:37:24 - SDK Manager] Parse XML: http://innovator.samsungmobile.com/andr ... sitory.xml
[2011-11-11 15:37:24 - SDK Manager] Found GALAXY Tab by Samsung Electronics., Android API 8, revision 1
[2011-11-11 15:37:24 - SDK Manager] Fetching URL: http://developer.sonyericsson.com/edk/a ... sitory.xml
[2011-11-11 15:37:25 - SDK Manager] Validate XML: http://developer.sonyericsson.com/edk/a ... sitory.xml
[2011-11-11 15:37:25 - SDK Manager] Parse XML: http://developer.sonyericsson.com/edk/a ... sitory.xml
[2011-11-11 15:37:25 - SDK Manager] Found EDK 1.1 by Sony Ericsson Mobile Communications AB, Android API 10, revision 1
[2011-11-11 15:37:25 - SDK Manager] Done loading packages.
[2011-11-11 15:38:26 - SDK Manager] Preparing to install archives
[2011-11-11 15:38:26 - SDK Manager] Downloading Android SDK Tools, revision 15
[2011-11-11 15:39:07 - SDK Manager] Installing Android SDK Tools, revision 15
[2011-11-11 15:39:09 - SDK Manager] Installed Android SDK Tools, revision 15
[2011-11-11 15:39:09 - SDK Manager] Downloading Android SDK Platform-tools, revision 9
[2011-11-11 15:39:25 - SDK Manager] Installing Android SDK Platform-tools, revision 9
[2011-11-11 15:39:25 - SDK Manager] 'adb kill-server' succeeded.
[2011-11-11 15:39:26 - SDK Manager] Installed Android SDK Platform-tools, revision 9
[2011-11-11 15:39:26 - SDK Manager] Downloading SDK Platform Android 4.0, API 14, revision 1
[2011-11-11 15:40:37 - SDK Manager] Installing SDK Platform Android 4.0, API 14, revision 1
[2011-11-11 15:40:42 - SDK Manager] Installed SDK Platform Android 4.0, API 14, revision 1
[2011-11-11 15:40:42 - SDK Manager] Downloading SDK Platform Android 2.1, API 7, revision 3
[2011-11-11 15:43:04 - SDK Manager] Installing SDK Platform Android 2.1, API 7, revision 3
[2011-11-11 15:43:08 - SDK Manager] Installed SDK Platform Android 2.1, API 7, revision 3
[2011-11-11 15:43:33 - SDK Manager] 'adb kill-server' succeeded.
[2011-11-11 15:43:36 - SDK Manager] ADB: * daemon not running. starting it now on port 5037 *
[2011-11-11 15:43:36 - SDK Manager] 'adb start-server' succeeded.
[2011-11-11 15:43:36 - SDK Manager] Done. 4 packages installed.
[2011-11-11 15:43:36 - SDK Manager] ADB: * daemon started successfully *


Conclusion


Having used Helios (Eclipse 3.6), we must say that the Indigo install (Eclipse 3.7) went a lot smoother. Unlike the last time however, we installed it-all on a Virtual Box; With absolutely no trial-and-error, this same 32-bit Ubuntu Operating System image ran just fine on OS X, Windows XP, 64-bit Windows 7, and 64-bit Ubuntu.





Because we now have a VM ready to help jump-start every student project from-scratch, perhaps the best reason for this blog entry is to remind myself of what others might expect. -Since we have saved a few copies of the virtual image, we will probably not have to repeat the above process for a good deal longer than human-memory should be required to recollect such a mismatched hodge of geeky-wonderment.

Enjoy!

-R.A. Nagy



[ view entry ] ( 3399 views )   |  permalink
Color Enforcement in Swing 

Santa's Clothes


When a local charity asks one to be Santa Clause for the season, the first thing to do is to consider the audience.

In as much as this charity's audience consisted some affluent, yet also some very poor children, it was for more reasons than for my geeky-girth that we decided that we might fit the fuzzy-red suit rather nicely.

Santa's Certificate


Once folks learned that we were indeed GUI-enabled however, thoughts turned to how we might warp our talents into creating something fun; A gift that might make a kid's season a little brighter:



After passing the hat, the idea was to gift each happy-lap-sitter a certificate; A smiling-enhancing present; -Something charity-affordable (read f-r-e-e) that a child might brandish to tell the world how nice they were trying to be.

Santa Tech


So in addition to donning the suit, we put-on a little Java for the season. While we could have used C#, I wanted to ensure that kids everywhere had a chance to get a certificate from elves welding as many different types of computers, as possible.

One thing leading to another (as they usually do) we also decided that since not all Elves like the same colors, that we needed a quick way to blanket an entire GUI with the same font, color, background, and foreground attributes.


package com.soft9000.gui;

import java.awt.Component;
import java.awt.Container;
import javax.swing.JComponent;

/**
* An opportunity to demonstrate a way to recursively impose an arbitrary set of
* attributes on a Component/JComponent Hierarchy.
*
* @author profnagy
*/
public class StyleMaster {

/**
* Enforce the style on a Container.
*
* @param ref A Container - Like JFrame - While not Components, they have them :)
* @param example The Component to use for the change.
*/
public static void Enforce(Container ref, Component example) {
if (ref == null || example == null) {
return;
}
ref.setForeground(example.getForeground());
ref.setBackground(example.getBackground());
ref.setFont(example.getFont());
Enforce(ref.getComponents(), example);
}

/**
* Enforce the example style on a JComponent and any JComponent Children.
*
* @param ref The Component to change.
* @param example The Component to use for the change.
*/
public static void Enforce(JComponent ref, Component example) {
if (ref == null || example == null) {
return;
}
Enforce((Component) ref, example);
Enforce(ref.getComponents(), example);
}

/**
* Enforce the example style on a Component array and any JComponent Children.
*
* @param ref The Component to change.
* @param example The Component to use for the change.
*/
public static void Enforce(Component[] ref, Component example) {
if (ref == null || example == null) {
return;
}
for (Component comp : ref) {
try {
JComponent jcomp = (JComponent) comp;
Enforce(jcomp, example);
} catch (ClassCastException ex2) {
Enforce(comp, example);
}
}
}

/**
* Enforce the example style on a Component. (Everything gets here eventually.)
*
* @param ref The Component to change.
* @param example The Component to use for the change.
*/
public static void Enforce(Component ref, Component example) {
if (ref == null) {
return;
}
ref.setFont(example.getFont());
ref.setForeground(example.getForeground());
ref.setBackground(example.getBackground());
}
}

Since I was using Swing, the task was easy enough:

/** Creates new form jpNaughtyNice01 */
public jpNaughtyNice01(JFrame parent) {
this.parent = parent;
initComponents();
jbMasterElf.setFont(new Font("Comic Sans MS", Font.BOLD, 18));
jbMasterElf.setForeground(this.jlblBrowser.getForeground());
jbMasterElf.setBackground(this.jpElfMode.getBackground());

StyleMaster.Enforce(this, jbMasterElf);
}

Our Christmas Present to aspiring Java GUI Guru's everywhere is to share with you how we were able to do that quickly, easily, and efficiently.

JComponent


While just about everything can be updated, note that the inability to set the tab-color of a JTabbedPane is well known:



What is sage, however, was to demo what setting the background color of a combo box did. By keeping the selection from looking like a JTextEdit, no matter what color we use the default dithering always seems to look rather nice:



By factoring in the foreground-color, even the blending of a button-background looks 'kewel, too.

But Wait - There's More!


(-I've always wanted to 'blog that) :)

But here is the real bonus - in as much as everything from JOptionPane to JFileChooser is a JComponent, you can use StyleMaster to make even the standard components match. So when it come time to use another component:


private void jbLocateCertActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser ref = new JFileChooser();
StyleMaster.Enforce(ref, this.jbMasterElf);
ref.showOpenDialog(parent);
}


-The above single line of code will Enforce() a nice change on just about anything 'Swing:





You've just gotta love recursion: Well done, Oracle/Sun!


--See you at the mall,

-R.A.Nagy


[ view entry ] ( 2588 views )   |  permalink  |  related link
Angry Buddha Springs? 

Loco Motion


Well - true to form - yet another game is sweeping the blogs today. We see it on FaceBook. We see it on Android. We see it on T-shirts in Wal*Mart.

-What was even all the buzz at summer camp this year? Angry Birds, of course!

One of the fun things about AB is the way that objects can bounce, rock, and wobble after they are hit .... even well after they are hit!

How did they make all of that happen in C++? With physics, of course!

Box2D


Since we have been ''into'' creating rich media applications of late, we decided to look into the actual software behind those 'wobbles in AB. Known as Box2D, in addition to C++, we were surprised to find portings of the Framework to Adobe Flash & Java.

NetBeans


After working the C++ download for awhile, we decided to give the Java version of Box2D a spin (I have someone else working on Flash.) We have pretty much abandoned Eclipse for reasons of code-loss (i.e. far too many files lost due to 'Workspace Issues.') -Fortunately, we have never lost so much as a semicolon with NetBeans.

1 + 1 = 11


Combining the two together, here is all we have to do:

1.) Get a copy of the SVN.

2.) Create a Maven Project on NetBeans.


3.) Point to the "Existing Code Base."


4.) Press "Finish"


While SVN will take a few moments to do it's thing(s), all works extremely well under Ubuntu. -Thereafter, moving it over to the Windows 2000 VM was a slice 'o cake, too.

RIA - Not?


While the documentation warns that the reference implementation for the Java rendering uses Java2D, it seems fine for appreciating the design and developer's use of the Box2D Framework. Gabe also had a great little snippet to share, too.

Enjoy!

-Rn

p.s. What is with the "Buddha Springs" you might ask? Well, it is part of the excellent theory of operations PDF, as offered by Master Erin Catto.

[ view entry ] ( 9379 views )   |  permalink  |  related link

<<First <Back | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | Next> Last>>