Manuella steg för att bygga .apk-fil

Diskussion i 'Frågor, support och diskussion' startad av henca, 28 nov 2010.

  1. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 313
    Mottagna gillanden:
    192

    MINA ENHETER

    Hej!

    Jag skulle vilja skriva en Makefile som bygger min applikation från källkod till .apk-fil. Dock saknar jag vana vid java och framför allt saknar jag kunskap om vad som händer "under täcket" med eclipse.

    Det som jag idag tror mig klara av är:

    1) att signera en .apk-fil
    2) att med zip packa in ett antal filer i en .apk-fil

    Det som jag behöver veta är:

    Hur man skapar filen classes.dex , jag gissar att den kommer från ett antal javafiler?

    Hur man skapar .xml-filer i .apk-filen? Trots sina filnamn är det inte några xml-filer, utan någon form av databas? Berkley DB låg nära till hands att gissa, men db_verify på en sådan fil tycks anse annat.

    Hur man skapar filen resources.arsc?

    Jag har sett lite på nätet om att man kan använda ant om man inte vill använda eclipse. Dock skulle jag hellre vilja förstå precis vilka steg som görs och sedan skriva mig en Makefile.

    Finns det någon som har koll på dessa delar?

    Skälet till att jag vill slippa Eclipse är inte bara att jag skulle ha något emot peka och klicka. Dels skulle jag med en Makefile själv kunna styra precis vad som hamnar i .apk-filen. Idag dras det med lite junk som inte behövs där. Dels så misslyckas eclipse och kräver ett antal manuella handgrepp då jag checkat ut ett rent källkodsträd utan några automatgenererade filer. Dessa manuella handgrepp brukar jag glömma bort och tvingas lägga någon timme på att återforska mellan varje gång jag uppdaterar min app.

    m v h Henrik
     
  2. softarn

    softarn Teen Droid Medlem

    Blev medlem:
    4 mar 2010
    Inlägg:
    361
    Mottagna gillanden:
    9

    MINA ENHETER

    Edit: Oj, missade visst ett par rader där, du ville inte ha ant.

    Här finns en bra guide för ant och android
    http://developer.android.com/guide/developing/other-ide.html

    Tror att den ger dig det du behöver. När du bygger med ant så kör "ant clean debug" för att undvika lustiga referens fel.
     
    Last edited: 28 nov 2010
  3. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 313
    Mottagna gillanden:
    192

    MINA ENHETER

    Tack för svaret om ant iallafall! Jag började tugga lite i det sura äpplet och testade ant-spåret i hopp om att det inte skulle dölja vilka olika steg som skedde.

    Med följande kommando:

    Kod:
    ant -v release
    ...visade ant en hel del information om vilka kommandon som utfördes. Denna information ledde till att jag kunde skriva följande Makefile:

    Kod:
    # Where to find Android SDK
    SDK_DIR ?= /usr/local/android-sdk-linux_86/platforms/android-2.1
    BIN_DIR = $(SDK_DIR)/tools
    
    # Find out the name of the package being built
    PACKAGE_LINE=$(shell fgrep package= AndroidManifest.xml)
    QUOT = $(word 1, " " )
    PACKAGE = $(word 2, $(subst $(QUOT),,$(subst =, , $(PACKAGE_LINE))))
    PACKAGE_DIR = $(subst .,/,$(PACKAGE))
    
    # Generated java will be placed here
    GEN_TOP = gen
    GEN_DIR = $(GEN_TOP)/$(PACKAGE_DIR)
    
    all: gen/$(PACKAGE_DIR)/R.java
    
    clean:
    	$(RM) -r $(GEN_TOP)
    
    $(GEN_DIR)/R.java: AndroidManifest.xml $(wildcard res/*/*) \
                       $(filter-out $(wildcard $(GEN_DIR)), $(GEN_DIR))
    	$(BIN_DIR)/aapt package -m -J gen -M $< -S res \
                           -I $(SDK_DIR)/android.jar
    
    $(GEN_DIR):
    	mkdir -p $@
    
    
    Så nu har jag iallafall en Makefile som kan skapa den kod som skall skapas automatiskt. Tidigare har alltid eclipse buggat ur för mig när den automatgenererade koden försvunnit efter en ny utcheckning. Kanske kommer jag någon gång framöver komplettera min Makefile så att den når ända fram till en signerad .apk-fil. Det blir dock vid något annat tillfälle när jag har mera tid att lägga på detta.

    m v h Henrik
     
    Last edited: 5 dec 2010
  4. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 313
    Mottagna gillanden:
    192

    MINA ENHETER

    Nu har jag fått till en komplett Makefile som når ända fram till målet med en fungerande .apk-fil. Jag kopierar inte hela filen till detta forum, men den kan läsas på http://telenorkontant.cvs.sourceforge.net/viewvc/telenorkontant/TelenorKontant/Makefile?view=markup

    Den kommer även ingå i framtida källkodsdistributioner av min app Telenor Kontant.

    Så som jag valde att göra den så skapar den automatiskt från källkod en signerad apk-fil, dock måste man manuellt skriva in lösenordfrasen för signeringen. Det visade sig att "det junk" som jag inte ville ha med i .apk-filen hamnade där på grund av att det låg under res-katalogen. Nu valde jag att manuellt ta bort det med "aapt remove".

    Det faktum att jag lyckats med konststycket att skriva denna kompletta Makefile innebär inte på något vis att jag anser mig ha blivit någon slags expert på de verktyg som används. Jag har bara kunnat konstatera att min genererade .apk-fil tycks fungera och beror minst lika mycket på vare tur som skicklighet.

    m v h Henrik