Search This Blog

10 July 2010

Publishing to the Android Market

I wanted to give publishing a shot, so I made a small tool to browse prime numbers and then started down the publishing notes...

After you finish cleaning up your code (remove debugging logging, etc) and make sure it still works....

Add versioning to your AndroidManifest.xml.  I'm hoping that eventually this piece can be replaced with something that reads the pom.xml... but, in the meantime attach these to the top level manifest:
android:versionCode="1"
android:versionName="1.0"

Then let's add a uses-sdk element:
   
    <uses-sdk android:minSdkVersion="7"
          android:targetSdkVersion="8"/>
Update your pom.xml:
           
               
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>maven-android-plugin</artifactId>
                <version>2.5.0</version>
                <configuration>
                    <androidManifestFile>${project.basedir}/src/AndroidManifest.xml</androidManifestFile>
                    <assetsDirectory>${project.basedir}/src/main/assets</assetsDirectory>
                    <resourceDirectory>${project.basedir}/src/main/android/res</resourceDirectory>
                    <!--<resourceOverlayDirectory>${project.basedir}/src/main/android/overlay</resourceOverlayDirectory>-->
                    <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                    <sdk><platform>7</platform></sdk>
                    <deleteConflictingFiles>true</deleteConflictingFiles>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                    <sign>
                        <debug>false</debug>
                    </sign>
                </configuration>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <id>android-undeploy</id>
                        <phase>pre-clean</phase>
                        <goals><goal>undeploy</goal></goals>
                    </execution>
                    <execution>
                        <id>alignApk</id>
                        <phase>install</phase>
                        <goals>
                            <goal>zipalign</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>android-deploy</id>
                        <phase>install</phase>
                        <goals><goal>deploy</goal></goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jarsigner-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <id>signing</id>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                        <phase>package</phase>
                        <inherited>true</inherited>
                        <configuration>
                            <archiveDirectory></archiveDirectory>
                            <includes>
                                <include>target/*.apk</include>
                            </includes>
                            <keystore>android.keystore</keystore>
                            <storepass>{{YOUR_PASSWORD}}</storepass>
                            <keypass>{{YOUR_PASSWORD}}</keypass>
                            <alias>android</alias>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Now when you redeploy (mvn clean install) it will also create a target\YOURAPP-1.0-SNAPSHOT-aligned.apk...  That will be the one we upload to Google.

Make sure you are registered with the Android Market.

Click on the "Upload Application".



Fill in the form...  Here are a few notes/gotchas:

1. If your app's icon is not a 48x48 PNG, it will give you these error messages:
The icon for your application is not valid. Please use a 48x48 PNG.
Market requires versionCode to be set to a positive 32-bit integer in AndroidManifest.xml.
Market requires versionName to be set in AndroidManifest.xml.
Market requires the minSdkVersion to be set to a positive 32-bit integer in AndroidManifest.xml.
Fixing the icon resolves all of these.

2. You can't just browse and hit publish.  You have to hit "Upload" on each item.  The APK has to be uploaded before you can upload pictures.  Make sure to choose the -aligned.apk one.

3. Screenshots vs Promo graphics... Screenshots are the ones that show up on the app description page.  Promos are the tiny ones that scroll across the top (ie: Featured Apps).  Note the commentary in the side.  If you take a picture from the emulator, strip off the skin and resize it as suggested.

4. You can NOT have just 1 screenshot.  You can have 0.  You can have 2. You can not have 1.  Weird, I know.


If you still have your app installed on your phone for testing, uninstall it now.

And for a little fluff....
Go to the QR-Code Generator and specify a market url using the package name (not class name) of your app.  For example, for the Prime Browser, I used 'market://details?id=org.eoti.android.primebrowser'.  Choose whatever size you want (I did small on mine) and generate a QR Code... as such:

Once you have the QR code, you can put it on your blog (as I did on the left side of this page) or email it, or whatever you like.

The real key is that now you can pull out your phone, scan it with your Barcode Scanner and whala - you can see your app in the market place.

Go ahead and install it.  Enjoy =)

1 comment:

  1. For the images...

    put a 48x48 in the drawable directory and in the drawable/drawable-mdpi

    put a 36x36 into the drawable/drawable-ldpi directory

    put a 72x72 into the drawable/drawable-hdpi

    That should work best across all phones

    ReplyDelete