[Android SDK] Get source code from APK using dex2jar

1.- Obtain APK (rooted phone, or Titanium Backup/AppMonster)

2.- Rename APK to zip, unzip it

3.- Open command line tool, go to your dex2jar installation folder and type
./d2j-dex2jar.sh ../myapp/classes.dex

This will output a .jar file with the code

4.- Open JD-GUI and open .jar file obtained in step 3


When installing Apps in my Android phone using ADB (via Eclipse internally, or via command line tool), i’ve found the following error:

1914 KB/s (4580896 bytes in 2.337s)
pkg: /data/local/tmp/package.apk


It seems to appear mostly on rooted phones (mine is). The solution is to change permissions to directory


from rwxrwxr– to rwxrwxrwx.

This should do the trick 🙂 at least i’m able to install APK’s from now on.

Hope it helps!

Uploading Apps to Google Play. Basic Guide (Marmalade SDK)

I’m proudly uploading my first App. (Soon i’ll post more info about it:) )
So it’s time to sign the APK and send it up. So i’ll do a quick remind of the basic steps for that.

This time i’ve chosen Marmalade to develop the App, so what we need is a signed .apk file valid for Google Play. We have to deploy it using the Marmalade Deploy Tool. So, to make the .apk suitable, we need to attach it with a key store file.

Generating a new .keystore file

So, the first thing we need is that key store file. We are going to to generate it using keytool.
keytool comes with the Java Development Kit (jdk) and can be called from command line, writing:

$ keytool

In order to generate the .keystore file that we need, keytool has to be supplied with some arguments. These arguments are detailed more deeply here, but the basic usage should fit for us:

$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

we just need to change the default .keystore file name and the alias_name by our own names.
Increasing the validity could also be a good idea, to make the keystore file valid for a longer period.

keytool will now request some additional data we have to fill, like our name, organisation unit, organisation name, city, state, and locale code.

once done, we have our .keystore file ready to go.

Linking .keystore file to our marmalade project

Now we have to link this keystore file into our Marmalade project. If you are not using Marmalade, and you develop with <Android SDK> or similar instead, you can follow the remaining steps in the signing tutorial

So, in the project’s .mkb file, we have to add the following into the “deployments” section:

# … previous “deployments” content

# Lines related to keystore file:


# Additional lines that are necessary

The android-aliasname and android-keystore parameters need to match with the ones passed to keytool. The android-keypass is the one we filled when keytool asked us for it.
In this case, the .keystore file is located in the project’s root directory, same as the .mkb file.

Now we can run the deploy tool again. In the third stage: Configuration, into the ‘Android’ specific options, we’ll see that the “Application keystore”, “Key alias name”, and “Private key password” fields are filled with the values we put in the .mkb file.
If these are not, review your .mkb file again; Probably there is something missing.

So, after deploying the App, we have our signed .apk file ready to be uploaded to Google Play!

The complete tutorial for Android developers can be found here
Some additional tips:

It can be useful to do a quick script using ant that modifies the AndroidManifest.xml file to set the correct versionName and versionCode values.
Elsewhere you’ll have to manage the version codes and version names by yourself. Don’t forget that every update of the App that is uploaded to Google Play has to have the same package name, and a greater versionCode and versionName

We can also add fancy icons to our app (marmalade splash logo makes our app look so poor, doesn’t it?) adding the following lines to the deployments section:
We need three .PNG images with the corresponding sizes: 72×72, 48×48 and 36×36 pixels.