Probleme mit Java Apps und Gatekeeper

Wer versucht hat nach dem Update auf „Mountian Lion“ eine neue Java Applikation zu installieren, wird wahrscheinlich auf eine Fehlermeldung nach dem Schema

„Applikation XYZ“ ist beschädigt und kann nicht geöffnet werden. Es empfiehlt sich, das Image auszuwerfen.

Ursache für dieses Problem ist Gatekeeper. Während man andere Applikationen problemlos per Kontextmenü im Finder öffnen kann, so das diese nach einer Sicherheitsabfrage zugelassen sind, funktioniert dies bei Java Applikationen nicht mehr.

OS X meldet das das Paket defekt ist

Um die Java Applikationen trotzdem zur Ausführung zu bewegen, muss für den ersten Start Gatekeeper auf „Keine Einschränkung“ gestellt werden. Anschließend kann die Einstellung wieder auf den ursprünglichen Wert zurückgestellt werden. Besagte Java Applikation läuft nun auch mit aktivierten Gatekeeper.

PlayN

Wer ein Spiel für ein Mobilgerät schreiben möchte hat das Problem das es eine ganze Menge dieser Systeme gibt. Die bekannteren sind sicherlich Android und iOS. Möchte man für diese Systeme ein Spiel schreiben, so wäre eine Abstraktionsschicht eine feine Sache. Eine solche bietet Google mit „PlayN“ unter der Apache Lizenz an. Mit diesem Framework wurde unter anderem die Google Chrome Version von Angry Birds geschrieben. Aktuell werden folgende Plattformen unterstützt:

  • Java
  • HTML5
  • Android
  • iOS

Auch Flash wird unterstützt, wobei das Backend dafür im Moment einen Maintainer sucht und deshalb in dieser Liste nicht auftaucht. Herunterladen kann man sich PlayN unter http://code.google.com/p/playn/.

Weitere Informationen gibt es unter:
http://code.google.com/p/playn/wiki/PlatformStatus
http://www.schockwellenreiter.de/blog/2012/03/12/playn/

APK Dateien dekompilieren

Manchmal ist es doch sehr praktisch eine APK Datei zu dekompilieren, z.B. um ein wenig Reverse Engineering zu betreiben. Nachdem wir die gewünschte APK auf der Festplatte haben laden wir uns dex2jar unter http://code.google.com/p/dex2jar herunter. Mit diesem Tool wandeln wir den Dalvik Intermediate Code in eine JAR (sprich Java) Datei um. Wir wenden dex2jar mittels

dex2jar.sh test.apk

auf unsere APK an. Heraus kommt eine JAR Datei welche wir mit der JD-GUI (zu finden unter http://java.decompiler.free.fr/?q=jdgui) öffnen und uns so anschauen können.

Weitere Informationen gibt es unter:
http://stackoverflow.com/questions/3122635/android-decompile-apk
http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode

AndEngine und Eclipse unter Ubuntu aufsetzen

Bei AndEngine handelt es sich um eine Gameengine für Androidgeräte. Die Apps für diese Plattform werden ja bekanntlich in Java geschrieben. Und darum soll es hier auch gehen. Im ersten Schritt wird Eclipse aufgesetzt und anschließend nehmen wir die AndEngine in Betrieb. Im ersten Schritt muss also das Paket eclipse installiert werden. Danach sollte das Android SDK für Linux unter http://developer.android.com/sdk/index.html heruntergeladen werden und auf der Festplatte entpackt werden. Dann geht es in den Ordner tools des SDKs und dort wird dann

./android update sdk 

ausgeführt. Nun bestätigt man die Lizenz und installiert die verschiedenen SDK Versionen. Dies kann dabei einige Minuten dauern.

Nun kann man Eclipse starten. Beim ersten Start erscheint ein Begrüßungsbildschirm den man schließen kann. Danach sollte man unter Help -> Install new Software die Android Development Tools installieren. Dazu wird in dem sich öffnenden Dialog die URL http://dl-ssl.google.com/android/eclipse/ eingegeben und durch einen Druck auf den Add… Button hinzugefügt. Dann klicken wir die Checkbox Developer Tools an und betätigen die Installation mit dem Next… Button. Mittels eines Assistenten wird man nun durch die Installation geleitet. Nachdem die Installation beendet ist empfiehlt Eclipse einen Neustart der Umgebung. Diesem sollte Wunsch sollte man Folge leisten.

Nun benötigt Eclipse die Information wo das Android SDK sich auf der Festplatte befindet. Dazu geht man auf Window -> Preferences -> Android. Dort wählt man den Pfad des Android SDKs aus und bestätigt den Dialog mit OK.

Die grundlegende Konfigurationsarbeit ist damit geleistet. Nun kann mit dem ersten Projekt begonnen werden. Dazu gehen wir auf File -> New -> Project und wählen dort Android Project aus und klicken dann auf Next. In dem darauf folgenden Dialog geben wir dem Projekt einen Namen z.B. Hello World. Im Feld Package Name geben wir den Namen des Package an z.B. net.seeseekey.hello_world und bei Activity name z.B. FormMain und bei Application name z.B. Hello World und bestätigen das ganze mit dem Finish Button.

Danach wird automatisch das Grundgerüst für eine Android Applikation erzeugt. Sollte es beim Erzeugen der Anwendung der Fehler

Project ‚RuntimeAndroid‘ is missing required source folder ‚gen‘
The project cannot be built until build errors are resolved 

auftreten so hilft es die R.java Datei zu löschen. Sie wird danach automatisch neu erzeugt. Wenn wir nun auf den grünen Play Knopf (Run) in der Symbolleiste klicken so startet Eclipse das Programm im Android Emulator. Beim ersten Start sollte allerdings ein Dialog erscheinen welcher einem anbietet ein virtuelles Gerät für den Emulator anzulegen. Nachdem dies geschehen ist, wird das Hello World Programm im Emulator geladen und ausgeführt. Und schon ist das erste Hello World Programm geschrieben und die Funktionsfähigkeit der IDE getestet.

Nun geht es an die AndEngine. Erst einmal holen wir uns den Sourcecodes mittels hg (Mercurial) auf die Festplatte:

hg clone https://andengine.googlecode.com/hg/ andengine
hg clone https://andengineexamples.googlecode.com/hg/ andengineexamples 

Anschließend importieren wir das andengineexamples Projekt (File -> Import…) in den Workspace. In dem Projekt AndEngineExamples sind dabei viele Beispiele zur Anwendung der Engine zu finden.

Nun nehmen wir unser bereits angelegtes Hello World Projekt und erzeugen in diesem (mittels New -> Folder) einen Ordner namens lib. In diesen kopieren wir die andengine.jar aus dem AndEngine Examples Projekt. Nun klicken wir mit der rechten Maustaste auf die andengine.jar und wählen dort Build Path -> Add To Build Path… aus. Damit ist die Bibliothek referenziert. Nun gehen wir in unsere Activity, in diesem Fall FormMain und löschen dort alles bis auf die packages Zeile. Nun fügen wir dort folgenden Quelltext ein:

public class FormMain extends BaseGameActivity {
	// Konstanten
	private static final int CAMERA_WIDTH = 720;
	private static final int CAMERA_HEIGHT = 480;

	// Variablen
	private Camera mCamera;

	@Override
	public Engine onLoadEngine() {
		this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
	}

	@Override
	public void onLoadResources() {
	}

	@Override
	public Scene onLoadScene() {
		this.mEngine.registerUpdateHandler(new FPSLogger());

		final Scene scene = new Scene(1);
		scene.setBackground(new ColorBackground(0, 0, 0.8784f));

		return scene;
	}

	@Override
	public void onLoadComplete() {

	}
}

Anschließend werden mittels Strg + Shift + O alle benötigten Importe in die Datei eingefügt. Wichtig ist es jetzt noch dem Manifest folgende Zeile hinzuzufügen:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

Nun kann man das ganze im Emulator starten. Es dürfte ein blauer Bildschirm angezeigt werden. Nun kann man sich damit beginnen das ganze mit Leben zu erfüllen :)

Weitere Informationen gibt es unter:
http://www.andengine.org/
http://code.google.com/p/andengine/
http://code.google.com/p/andengineexamples/
http://developer.android.com/sdk/installing.html
http://www.andengine.org/forums/tutorials/getting-started-updated-t2198.html
http://www.andengine.org/forums/tutorials/andengine-core-terminology-t316.html
http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html
http://www.andengine.org/forums/tutorials/eclipse-andengine-and-helloworld-t380.html
http://www.andengine.org/forums/tutorials/mimminito-s-tutorial-list-t417.html

Vala

Erstaunt stellte ich gestern fest das der neue Standardfotomanager unter Ubuntu (Shotwell) in Vala geschrieben ist. Bei Vala handelt es sich um eine Programmiersprache welche stark an C# und Java angelehnt ist. Dabei benötigt sie aber keine Laufzeitumgebung. Man hat dann also eine Sprache welche eine moderne Syntax bietet und keine Laufzeitumgebung benötigt sondern nativ auf dem System läuft. Im Gegensatz zu .NET/Mono hat die Sprache keinen Garbage Collector sondern implementiert automatische Referenzzählung zur Speicherverwaltung.

Beim durchschauen der Syntax (verglichen mit C#) sind mir einige Unschönheiten aufgefallen welche einige Konstrukte nicht sehr elegant aussehen lassen, aber das muss man sich wahrscheinlich mal in einem kleinen Projekt anschauen. Es ist möglich mit Vala plattformunabhängige Anwendungen zu schreiben. Als Standardbibliothek steht einem die glibc sowie die Geelib zur Verfügung. Der Vala Compiler wandelt den Quellcode in C Code um und kompiliert diesen dann anschließend. Definitiv eine Sprache die man sich mal anschauen sollte :) Die offizielle Seite von Vala ist unter http://live.gnome.org/Vala zu finden.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Vala_%28Programmiersprache%29