2012-09-29

MantisDroid Free lanserad på Play Store

Det finns nu en gratisversion av MantisDroid på Play Store.
De funktioner som saknas i gratisversionen är:

  • Ändring av issues
  • Hanteringen av projekt.
Utöver det så är det exakt samma app.

Gratis- och betalapp med samma kodbas

Jag har efter lanseringen av MantisDroid insett att jag även behöver publicera en gratisversion, så att man kan ladda hem appen och se om den är något att ha innan man betalar för fullversionen. Visst, man har 15 minuter på sig att testa en betalapp, men det är inte många som gör det eftersom 15 minuter är så väldigt kort tid.

Lösningen är alltså att skapa en gratisversion av min app med begränsad funktionalitet.

Hur gör man en gratisversion utan att duplicera all kod?

Det är faktiskt ganska enkelt. En app kan använda en annan app och referera till den som ett library (bibliotek). På så sätt kan den nya appen utnyttja allt i den andra. Dock kan inte en app som markerats som library längre vara en app som går att installera på en enhet. Därför behövs det 3 projekt: En betalapp, en gratisapp och en library-app. I mitt fall så ligger all kod i betalappen som redan är publicerad på Play Store.
  1. Skapa library-appen genom att skapa ett nytt projekt med lämpligt paketnamn, ex. se.nextsource.android.mantisdroid
    Det är samma paketnamn som i betalappen, men det gör ingenting.
  2. Öppna library-appen i Eclipse, ta fram properties för projektet, klicka på Android och markera checkboxen "Is Library".
  3. Flytta kod och resurser som ska vara gemensamma från betalappen till library-appen.
  4. Öppna properties för betalappen, klicka på Android och lägg till library-appen som ett Library.
  5. Skapa gratisappen som ett nytt projekt med nytt paketnamn, ex. se.nextsource.android.mantisdroidfree 
  6. Öppna properties för gratisappen, klicka på Android och lägg till library-appen som ett Library.
  7. Deklarera de komponententer (activity, service, receiver, provider etc. och även permissions, uses-library etc.) som gratis- och betalappen använder från library-appen.
  8. Nu har du 2 appar med exakt samma kodbas men med olika paketnamn.
  9. För att särskilja versionerna mellan varandra så jag lagt till en ny Application-klass i gratis- och betalapp-projekten som ärver från en Application-klassen som ligger i library-appen. Vid onCreate så sätts vilken version som körs i superklassen och sedan anropas super.onCreate(). I superklassens onCreate så slår jag av och på olika funktioner som ska skilja applikationerna åt.
Ref: http://developer.android.com/tools/projects/projects-eclipse.html

Problem jag stötte på
-Se till att ingen duplicering av kod eller res-filer finns för då bygger det inte!
-Från SDK 14 så går det inte att använda resId i switch-case i ett library eftersom de inte längre är final så ändra det med refactor-funktionen i Eclipse till if-else. Irriterande, men det finns en bra förklaring:
http://android-developers.blogspot.se/2011/10/changes-to-library-projects-in-android.html
-Proguard fick svårt att obfuskera koden i biblioteket så jag var tvungen att lägga till följande i proguard.cfg:
-keep public class com.google.android.vending.licensing.ILicensingService
-dontwarn org.xmlpull.v1.**
-dontwarn android.support.**
Obs! Tänk på att lägga till det i alla 3 proguard.cfg.

Resultatet
Nu när allt är klart så behöver jag bara göra följande för att införa kodändringar, bygga och publicera mina 2 appar:
  1. Gör ändringar och fixar i library-appen.
  2. Ändra versionsnumret i apparna så att de stegas upp.
  3. Kör kommandot: ant release på båda apparna så att de bygger, obfuskeras och signeras för release.
  4. Testkör båda apparna så att de fungerar och ändringarna är testade.
  5. Lägg upp de 2 nya apk:erna på Play Store.
  6. Klart!

2012-09-06

Google Play Price Calculator

När jag lanserade min första betalapp på Play Store i helgen så funderade jag lite hur jag skulle sätta mina priser när vissa länder har 0% i moms och andra har 25%.
Det jag kom fram till var att jag ville att slutkund skulle "belastas" lika mycket oberoende av momsen så därför räknade jag fram så att det blev samma summa i alla länder.
Exempel:
I Sverige kostar appen 12 kr + moms = 15 kr
I Australien blev 12 kr = 1.74 AUD vilket om man konverterar tillbaks blir 12 kr eftersom det inte är någon moms på köpen där. För att "belasta" slutkund med 15 kr även i Australien så måste man höja priset till 2.2 AUD vilket blir 15.19 kr.

Det blev ett evigt räknande fram och tillbaks och lösningen på det problemet är så klart att låta datorn göra jobbet.

Här är min lösning:
http://www.nextsource.se/service/android/google_play_price_calculator/

Den fungerar som tjänsten i utvecklarkonsollen på Play Store och använder Googles valutakonverterare och gör mängder med AJAX-anrop mot den. Ett anrop för varje konvertering. Det jag lagt till är att den gör en extra konvertering tillbaks till SEK så att man ser hur mycket slutkund "belastas". Det går också att ändra värdet i varje valuta och direkt se vad det blir i SEK.

Mitt verktyg är bara ett hjälpmedel för att enkelt se ungefär hur mycket det belastar plånboken i varje land. Man bör så klart även ta hänsyn till vilken betalningsförmåga invånarna har i landet och kanske sänka priset i länder där lönenivån ligger lägre, men också höja i de länder där man i genomsnitt tjänar bättre.

2012-09-02

MantisDroid lanserad på Play Store

En Android-klient för MantisBT.

Målet har varit att klienten ska kunna göra det mesta som går att göra via webbklienten och det målet är nått. Självklart kommer det mer i senare versioner, men version 1.0 är riktigt kraftfull.

The following features and functions are implemented:
  • List issues for all projects or a specified project.
  • View issues lists - assigned to me, unassigned, all issues, recently modified, reported by me and resolved.
  • Create, read, edit and delete issue.
  • Full notes handling.
  • Full attachments handling.
  • Shortcut issue functions - Add Note, Change Status To, Assign To, Upload File.
  • Search issue by Id.
  • List all projects.
  • Create, read, edit and delete projects (managers and administrators).
Det finns några begränsningar:
  • Minst Android 4.0
  • MantisBT 1.2.9 eller högre
Det finns även en kul specialfunktion som gör att man kan logga in med hjälp av en URL som lämpligast görs till en QR-kod. Formatet är:
mantisdroid://path_to_mantisbt?user=usernam&pw=password&usessl=1
(user, pw och usessl är valfria).

Ladda hem och testa. Den kostar endast 15 kr inkl. moms.