setTag, getTag sitting in a tree…

Jag knåpar ihop en app som ska hålla koll på antalet slag man gör under en Frisbeegolf-runda och ganska oundvikligt hamnade jag i arbetet med att lägga till och ta bort View:s dynamiskt. Dessutom behövde jag på något sätt sitta och klura ut hur layouten av dessa View:s skulle se ut, vilket obönhörligen gjorde att jag snabbt kom i kontakt med getTag och setTag tillsammans med LayoutParameters.

En liten kodsnippet på hur det kan se ut

TextView textScore = new TextView(this);
textScore.setText("" +currScore.getScore());
textScore.setId(3);
RelativeLayout.LayoutParams paramsScore = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsScore.addRule(RelativeLayout.BELOW, textPlayer.getId());
row.addView(textScore, paramsScore);

Enkelt förklarat kommer denna kod att lägga till en View relativt positionerat under View:n textPlayer. Guld och gröna skogar, men vad man måste se till att hålla reda på är att setTag inte gillar att man använder id:t 0, som i setTag(0), för då kommer den View man vill positionera relativt att inte hamna just relativt till något annat än, så vitt jag kan förstå, till föräldern.

Alltså, se till att använda setTag med 1-indexering: setTag(1), setTag(2), …!

Galaxy Nexus, yakju -> yakjuxw

Jag har följt en tråd på Swedroid vilken handlar om att flasha om sin USA-flashade Galaxy Nexus-image till en mer svensknordiskeuropeisk-vänlig sådan. Detta är en guide för hur man kan återställa sin Galaxy till det originalformat man köpt den i.

Guide

Förkrav

  • PdaNet for Android (http://www.junefabrics.com/android/download.php)
  • Paul’s superboot, GSM-modellen (http://www.modaco.com/topic/348161-01-feb-r4-superboot-rooting-the-gsm-lte-galaxy-nexus/)
  • yakjuxw-image (http://www.mediafire.com/?m4ky5ybrv58gxh1) Observera att detta inte är en image som publiceras av Samsung eller Google. De har med största sannolikhet kommit från användare som lyckats ta kopior av sitt yakjuxw-system som de sedan varit vänliga nog att dela med sig av. Jag har lagt upp den på mitt Mediafire-konto, om inte annat för att själv ha tillgång till den om jag skulle behöva. Kontrollera följande hashar mot de filer ni laddat ner så att ni åtminstonde har någon verifikation på dem:
[MD5 hashes]
radio:      15d6bd69920a64e4acf3279271e73648
bootloader: 3f981a8e5f91df8a7a26a7583c1f80f8
boot:       c57720964027d8afdcee4c071dde2011
system:     46e6b6cd98ccf0006d21ccce62082165
recovery:   6046d9fcf2e877ad40d6a8e77c145c65
userdata:   d003ab084270edd22483ce8f1f8b05c9

Utförande

Installera PdaNet i Windows enligt alla konstens regler. Jag föreslår att man kopplar ur Galaxyn från USB:n (alternativt att man inte kopplar in den i datorn alls) innan installation av PdaNet. PdaNet innehåller drivrutiner för att kunna kommunicera med ett gäng olika telefoner över ADB och fastboot och det var det enda paket som jag fick att fungera ordentligt.

Packa upp innehållet från Paul’s superboot och yakjuxw-image i en lämplig mapp som du enkelt kan komma åt med kommandotolken/terminalen i Windows.

Utför dessa kommandon (OBS! Detta kommer att nollställa enheten totalt, så se nu till att ta BACKUP innan du kör detta)

c:\> fastboot-windows.exe flash bootloader bootloader-maguro-primela03.img
c:\> fastboot-windows.exe reboot-bootloader

//Vänta i ca 5-10 sekunder

c:\> fastboot-windows.exe flash radio radio-maguro-i9250xxla02.img
c:\> fastboot-windows.exe reboot-bootloader

//Vänta i ca 5-10 sekunder

c:\> fastboot-windows.exe flash system system.img
c:\> fastboot-windows.exe flash boot boot.img
c:\> fastboot-windows.exe flash recovery recovery.img
c:\> fastboot-windows.exe flash userdata userdata.img
c:\> fastboot-windows.exe reboot

Sådärja!

Då var det klart! Om allting gick vägen och det inte blev några problem med något av de angivna kommandona ovan har du nu en yakjuxw-baserad image till din Galaxy Nexus. Grattis!

Galaxy Nexus, yakjuxw -> yakju

Jag har följt en tråd på Swedroid vilken handlar om att flasha om sin svensknordiskeuropeiska Galaxy Nexus-image till en mer USA-vänlig sådan. Mycket handlar om att vilja få tag på Android-uppdateringar lite snabbare än om man skulle sitta på original-image:n, som enligt massvis med rykten, av okänd anledning, ska behöva gå genom Samsungs väna(?) behandling innan den släpps.

Det finns en guide i den tråden som jag är lite extra förtjust i, då den till 99% flashar om Galaxy Nexus med hjälp av en helt vanlig terminal och inte genom nån hopsnickrad peka-klicka-programvara där man har noll koll på vad som försiggår. Dessutom ser jag inte någon anledning att köra ett peka-klicka-gränssnitt om man kan göra saker och ting på samma enkla vis med en terminal.

Guiden är, lite ironiskt, baserad på att använda Windows. När jag följde lite olika guider var det massvis med Windows-fokuserade program som skulle köras och när jag till slut hittade en terminal-baserad guide som fungerade så växlade jag inte till Linux för att köra den där. Jag kan undersöka om det finns tid och ork att ta fram en Linux-baserad guide med.

Tro nu inte att denna guide är ett monster att gå igenom på grund av dess längd. Faktum är att det är en rätt kort procedur, men jag ville erbjuda en väldigt bildbeskrivande guide för de som känner sig väldigt osäkra på proceduren. Jag använder Windows på engelska, men med lite snabb huvudöversättning så kommer man att gå igenom den här guiden i ett nafs.

Guide

Förkrav

Utförande

Installera Android-drivrutinerna enligt följande lilla guide

1: Börja med att ladda hem drivrutinspaketet “Drivrutiner för Android” ovan, lägg den på skrivbordet. Jag använder WinRAR för att hantera dessa filer, så proceduren kan skilja en aning i det avseendet men generellt är det samma steg.

2: Packa upp innehållet i en valfri mapp, tex C:\galaxynexus, jag valde att lägga den på skrivbordet för guidens skull, men bara du håller reda på var innehållet tar vägen är det inga problem.

Som exempel på hur det bör se ut när du är färdig så visar jag här en skärmdump på listan över filer och mappar genom kommandotolken, som du kommer att använda dig av senare.

3: I Windows, klicka på Start-knappen/kulan -> högerklicka på Computer -> Manage. Klicka sedan på Device Manager i vänsterpspalten. Leta upp “Other devices” eller motsvarande där det finns en “Galaxy” med gul varningstriangel.

4: Högerklicka på “Galaxy” och välj “Update Driver Software…”

5: I dialogen som dyker upp, välj “Browse my computer for driver software”

6: Tryck på knappen “Browse” och se till att hitta den mapp som du packade upp i andra steget i denna bildguide. I den mappen ska du nu öppna “amd64” om du har Windows i 64-bitarsvariant eller “x86” om du har Windows i 32-bitars variant. Oavsett val här ska du därefter välja mappen “_drivers_google”, se till att “Include subfolders är iklickad” och klicka på Next. Se bilden nedan för ett livligt exempel.

7: Nu kommer Windows att försöka hitta en lämplig drivrutin och med absolut största sannolikhet presentera en röd dialog. Klicka på knappen “Install this driver software anyway”. Kortfattat är det så att Google’s drivrutiner inte är verifierade på något av Microsoft’s godkända vis, men det är mer en teknikalitet än att något allvarligt fel kan inträffa.

8: När Windows fått jobba en liten stund presenteras du med denna (inte så) lilla glada ruta

Grattis! Du har nu installerat drivrutinerna för ADB. Du kommer att behöva utföra denna procedur en gång till i guiden, så kasta inte mappen med drivrutinerna riktigt än.

Packa upp innehållet från Pauls superboot och IMM76I i en lämplig mapp som du enkelt kan komma åt med kommandotolken/terminalen i Windows.

Utför detta kommando

c:\galaxynexus> adb-windows.exe reboot bootloader

Nu kommer telefonen att boota om och hamna i så kallat fastboot-läge. Du kommer nu att behöva utföra drivrutinsinstallationen enligt bildguiden ovan, från punkt 3. Det kommer nog att gå lite snabbare för dig den här gången när du nu har ett humm om var saker och ting befinner sig. Skillnaden mellan förra installationen och denna är att det i Device Manager nu finns en annan enhet som heter “Android 1.0”

När den andra drivrutinsinstallationen är slutförd, skriv in detta kommando (OBS! Detta kommer att nollställa enheten totalt, så se nu till att ta BACKUP innan du kör detta)

c:\galaxynexus> fastboot-windows.exe oem unlock

När du svarat “Ja, jag vill nollställa allt och låsa upp bootloadern” på Galaxyn, kör nu följande kommandon

c:\galaxynexus> fastboot-windows.exe flash bootloader bootloader-maguro-primela03.img
c:\galaxynexus> fastboot-windows.exe reboot-bootloader

//Vänta i ca 5-10 sekunder

c:\galaxynexus> fastboot-windows.exe flash radio radio-maguro-i9250xxla02.img
c:\galaxynexus> fastboot-windows.exe reboot-bootloader

//Vänta i ca 5-10 sekunder

c:\galaxynexus> fastboot-windows.exe -w update image-yakju-imm76i.zip

Sådärja!

Då var det klart! Om allting gick vägen och det inte blev några problem med något av de angivna kommandona ovan har du nu en yakju-baserad image till din Galaxy Nexus. Grattis!

Men hallå, det funkar ju inte!

Q: Jag fastnar på drivrutinsinstallationen när jag kört kommandot “adb-windows.exe reboot bootloader” och en Android ligger på rygg med en lucka öppen på magen. Det dyker bara upp en “Unknown Device” istället för “Android 1.0” i Enhetshanteraren och drivrutinsinstallationerna fungerar inte!

A: Tack vare sirdjorgo kunde jag till slut komma fram till att detta beror på en eller två anledningar, antingen var för sig eller i kombination. 1: Man har installerat Samsungs drivrutiner sedan tidigare (antingen genom Kies eller genom andra Samsung-installationer) och för att guiden ska fungera måste man avinstallera allt detta först. Efter avinstallation rekommenderar jag att man startar om datorn. 2: Telefonen har slutat svara och kan inte kommunicera med datorn. Detta är inte alls tydligt, för det syns inte på telefonen att detta inträffat och inte heller på datorn. Det enda som bekräftade att telefonen slutat svara var när vi försökte trycka på “Start” (powerknappen) och telefonen inte bootade om eller ens reagerade. I det här läget är den enda utvägen att rycka batteriet, boota upp telefonen som vanligt och börja om från och med kommandot “adb-windows.exe fastboot reboot” så att telefonen hamnar i fastboot-läge igen.

Starta en aktivitet i en app från en annan app

Det här “tricket” kan vara användbart om man skapar en liten svit med appar som är tätt bundna till varandra, men inte nödvändigtvis måste leva under samma tak/app.

I appen vars aktivitet du vill starta utifrån, gör

Ändringar i Manifestet

Leta upp den aktivitet-tag, <activity>, som du vill kunna nå utifrån och lägg antingen till ett <intent>-filter, eller en rad

<activity
  android:name=".activities.OpenMeActivity"
  android:exported="true" >
</activity>

Som exempel kan ett helt Manifest se ut

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="nu.opentest"
 android:versionCode="1"
 android:versionName="1" >
  <uses-sdk android:minSdkVersion="7" />
  <application
    android:name=".OpenTest"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity
      android:name=".activities.OpenTest"
      android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <activity
      android:name=".activities.OpenMeActivity"
      android:exported="true" >
    </activity>
  </application>
</manifest>

I appen du vill kalla på en annan epps aktivitet, gör

Följande i kod

Intent intent = new Intent();
intent.setComponent(new ComponentName("nu.opentest", "nu.opentest.activities.OpenMeActivity"));
startActivity(intent);

Med detta kan man nu alltså inifrån en app få upp en specifik aktivitet i en annan app. Jag rekommenderar starkt en massa try/catches för att inte åka på en nit under produktion.

Samsung Galaxy Tab (P7300), virtuellt tangentbord och emulatorn

Jag har ingen egen SGT men jag har däremot fått låna en. Mitt mål nu är att (på ett så våldsamt sätt som möjligt) bryta ut det virtuella tangentbordet och försöka installera det på emulatorn, så jag inte är strikt bunden till att ha tab:en varje gång jag vill felsöka tangentbordsproblem.

Det är en process i stegen

  • Skaffa en kopia av SGT:ns original-operativ
  • Skaffa simg2img för att kunna montera de system-images som finns i SGT:ns original-operativ
  • Ta ut filerna
    • T9DB folder (from csc.rfs file)
    • AxT9IME.apk and AxT9IME.odex (from system.rfs file in app folder)
    • touchwiz.xml (from system.rfs file in etc->permissions folder)
    • libdhwr.so and libXt9core.so
    • android.policy.odex
    • bouncycastle.odex
    • core.odex
    • core-junit.odex
    • ext.odex
    • framework.odex
    • services.odex
  • Ta hem baksmali och smali för att kunna deodexa tangentbordet
  • Ta den deodexade tangentbordsfilen, döp om till classes.dex, lägg in i AxT9IME.apk
  • Placera alla de filer (förutom odex-filerna) som togs från operativet och lägg dem i sina respektive korrekta mappar
  • Be till Cthulhu

Felmeddelanden som inte klarar sig utan Google

Idag skulle jag lägga till en HP LaserJet 1200 i Lubuntu 12.04. Allting flöt på precis som jag förväntade mig i guiden tills jag skulle peka ut drivrutinen jag ville köra (PCL5e passar oftast skitbra till den här skrivaren, tillsammans med Gutenprint). Då får jag “CUPS server error”-meddelande som innehåller de (enda användbara bland flera) beskrivande orden “client-error-not-possible”.

Det var det jag hade att gå på. Processen att lösa det på blir: Öppna ny Chrome-flik, skriv in följande “lubuntu cups server error adding printer client-error-not-possible”, klicka på första svaret, lägg till smbclient, prova att lägga till skrivaren igen, cha-ching! Funkis skrivare!

Men vad i hela helsefyr är “client-error-not-possible” för ett beskrivande felmeddelande på att jag saknar smbclient? Jag svär högljutt inombords…

Lubuntu på HP dc7700p, saker att hålla i minnet (och hitta lösningar på)

Jag kände för att börja Dual-boota igen. Jag hade kört Windows i nästan ett år och tyckte väl att det var trevligt, men insåg att jag på min HP DC7700P borde köra något som kanske är lite mindre prestandakrävande och spelvänligt (BF3 och Syndicate och Portal), som tex Lubuntu. Det fanns dessutom lite folk i #sis (irc.bthstudent.se) som själva kör och har kört Lubuntu, vilket helt klart är en fördel när man ska börja felsöka konstigheter.

Det jag stötte på problem med direkt var

  • Nvidias drivrutiner
  • Dubbla skärmar
  • Tangentbordsnedtryckningar: repetitionsfrevens och delay
  • Fokus på nya fönster

Låt oss då gå igenom dem en i taget för att skriva ner länkar till källor på guider och lösningar, samt vad jag försökt själv och hur det ser ut att fungera.

Nvidias drivrutiner

Jag är lite kluven på vad man ska göra här. Det finns i skrivande stund två olika val man kan göra när man installerar Nvidia-drivisarna genom Lubuntus “Additional drivers”

  • Version current, recommended
  • Post-release updates, version current-updates

Skillnaderna på dessa, enligt vad jag hittat, är att “Post-release updates” uppdateras löpande och är mer känsliga för förändringar. Version current är en låst release som inte kommer att uppdateras. Jag har testat båda och båda har gett lite olika resultat för varje installation jag gjort. Jag brukar köra med recommended för att de är… tja, rekommenderade. Förhoppningsvis ligger det något bakom påståendet.

Slutligen

Jag använder mig av Nvidias “Version current” release av drivrutiner. Efter en del försök och hoppande genom alla möjliga olika ringar så ser det ut som om Nvidias drivrutiner klarar av att hantera skrivbordsmiljön minst lika bra som den drivrutin Lubuntu levererar som standard.

Dubbla skärmar

Dubbla skärmar i Ubuntu verkar det vara många som håller på att brottas med. Askubuntu har en intressant tråd som ser ut att ha gett bra resultat för vissa och mindre bra för andra. Dock är det lösningar på väldigt specifika önskemål. Det finns även en tråd på ubuntuforums som kan vara värd att gräva mer i för att se om man kan få ordning på saker och ting.

Slutligen

Efter att ha installerat om ett gäng gånger och testat med olika konfigurationer av Nvidias och Lubuntus drivrutiner, samt ett gäng olika konfigurationsverktyg så som nvidia-settings, arandr, Monitor Settings och Openbox Configuration Manager, kom jag till slut fram till följande uppsättning:

Nvidia: Kör “gksudo nvidia-settings” för konfiguration av skärmar. Det som är spännande finns under kategorin “X Server Display Configuration”. Där ställer jag in min primära skärm till 1600×1200. Jag har testat att sätta den till “Make this the primary display for the X screen” men inte sett någon skillnad från om den skulle var urklickad. Det finns en skärm till, den sekundära, men den är avaktiverad. Jag klickar på den och väljer “TwinView” under “Configuration”. Att använda sig “Separate X screen” har bara resulterat i en svart bakgrund och X-musmarkör på den sekundära. Jag sätter upplösningen på denna till 1680×1050. Därefter klickar jag på “Apply” och sedan (skitviktigt!) “Save to X Configuration file”. Här har jag fått lite blandade resultat, men om man kör det här verktyget med sudo så brukar det inte strula. Verktyget sparar då ner den konfiguration du klickat fram, till en xorg.conf som läses in varje gång Lubuntu bootar.

Openbox Configuration Manager: Den här kikade jag på riktigt tidigt och kom efter en hel del ominstallationer av drivrutinerna på att den med säkerhet också påverkar mycket av fönstermiljön i Lubuntu. Mycket riktigt, här finns godsaker som “Focusing windows”, “Placing windows” och “Primary Monitor”. Efter att ha petat runt lite kan jag bara konstatera att ett par av dessa inställningar verkar direkt överlappande nvidia-settings, så det är viktigt att ta en extra titt här för att påverka sättet som tex nya fönster dyker upp.

Tangentbordsnedtryckningar

En sak som jag gärna vill göra är att påverka vilken fördröjning en nedhållen tangent har innen den börjar repetera. Det här var inte så självklart som man kunde tro, dvs att använda verktyget Keyboard and Mouse och försöka påverka lite reglage, klicka Ok och sen glömma det hela. Något verkar fuffens i hur Lubuntu sparar ner dessa värden och i mitt fall ser detta inte ut att göras alls. Efter lite snack med mina Lubuntu-kompisar så är tanken att det ska finnas en fil placerad i .config/lxsession/$SESSIONNAME/desktop.conf, men det sker alltså inte i min miljö. Till dags dato har jag fortfarande inte kommit underfund med hur den här filen skapas och accessas av Lubuntu, för den skiner med sin frånvaro. Jag har ett par tester kvar att göra för att se om jag kan skapa den självmant och få Lubuntu att fatta läget, men jag är lite skeptisk.

Slutligen

Det sättet jag fick tangentbordsinställningarna att fungera på var att köra: cd; mkdir -p .config/lxsession/$DESKTOP_SESSION/; lxinput;, göra en tangentbordsjustering vilken som helst, klicka Ok och sedan gå in och redigera filen .config/lxsession/$DESKTOP_SESSION/desktop.conf, eftersom GUI-verktyget till synes inte fixar att göra detta. Däremot kan verktyget visa för dig vilken inställning du har, vilket iallafall är något.
Den här lösningen visade sig ha rätt så förödande effekter på fönstermiljön. Varje gång jag skapade filen och justerade delayen, så pajjade massvis med väsentliga delar i fönstermiljön. Jag rekommenderar inte att man gör på det här viset för tillfället.

Fokus på nya fönster

Det här är en rapporterad bugg som jag ganska snabbt blev lite irriterad på. Om jag tex använder mig av Alt+F2 för att få upp Run-fönstret, då placeras det per default i bakgrunden. Om det är det enda fönstret som är synligt visas det åtminstonde, men det har inget fokus.

Slutligen

Debian bugs ser ut att ha lösningen på problemet genom att redigera ~/.config/openbox/sessionname-rc.xml och lägga till följande innan </applications> i slutet av den filen:

  <application name="lxpanel" type="dialog">
      <focus>yes</focus>
  </application>

 Ett par saker till

  • Keybinds
  • 256-färgers xterm
  • 256-färgers gnome-terminal

Keybinds

Med det Windows-tangents-aktiverade tangentbord man har är det rätt användbart att lägga lite keybinds på det. I och med att jag kör TwinView på Nvidia-kortet såg jag det som väldigt tursamt att jag kunde få ett fönster att byta skärm, utan att för den sakens skull ha definierat “Monitor 0”, “Monitor 1”, osv, i xorg.conf. Jag hittade även ett kommando för att maximera fönster med en keybind.

Slutligen

Min .config/openbox/lubuntu-rc.xml innehåller förutom standardgrejset även dessa rader:

<keybind key="A-F10">
    <action name="ToggleMaximizeFull" />
</keybind>

<keybind key="W-C-Right">
    <action name="MoveResizeTo">
        <monitor>next</monitor>
    </action>
</keybind>

<keybind key="W-C-Left">
    <action name="MoveResizeTo">
        <monitor>prev</monitor>
    </action>
</keybind>

256-färgers xterm

Mina syntax highlighting definitioner i vim fungerar så mycket bättre när man har ett par fler än 16(!) färger i terminalen. Welcome, xterm-256color! Enkelt nog kunde jag gå in i min .bashrc och knattra lite.

Slutligen

Jag redigerade ~/.bashrc och lade i botten av den filen följande kodsnutt
if [ “x$TERM” = “xxterm” ]
then
export TERM=”xterm-256color”
fi

256-färgers gnome-terminal (och lite till)

Mina lite speciella önskemål rörande vim (som nästintill kräver 256 färger, anpassningsbar font till Dina och anpassningsbar markör) gjorde att jag fick byta till gnome-terminal. Den ingår tydligen i Lubuntu som standard och uppfyller alla dessa krav. JAg behövde göra ett par saker med min .vimrc.local för att allt slutgiltligen skulle gå rätt till

Slutligen

I min .vimrc.local så har jag:

if has("autocmd")
    au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
    au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
    au VimLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
endif

Liten extra notering om Worker om jag skulle glömma det…

För att få Worker (en DirOpus-inspirerad filhanterare) att lira snällt med gnome-terminal ska man sätta “Terminal program” till “gnome-terminal -e %s” och det kommando, säg vim, man vill köra till: “vim {F}” med inställningarna: Start mode: “in terminal”.
Uppdatering: Jag tror att jag kommit fram till en sak som jag aldrig förstått innan. Om man i Start mode väljer tex “Normal mode”, då används inte “Terminal program” för att utföra kommandot. Det är det “in terminal” och “in terminal and wait for key” är till för. Så fungerar det inte att använda sig av “in terminal” för något kommando, växla över till “normal mode” och skriv in hela kommandot som krävs för att det ska kunna exekveras på egen hand.

Automata-dagliga-, -nattliga-, -när-ni-vill-byggen av Android med Ant

Androidengineer har ett blogginlägg som jag läst på och testat för att få ordning på schemalagda byggen av mina (singular, egentligen) Android-applikationer.
Jag ska kortfattat försöka stylta upp vad det är som innefattar en sådan uppsättning i en Debian headless servermiljö. Jag har inte lyckats stillisera ihop en ren och fin sammanhängande process för detta, så vänligen läs in på länken ovan för att (föhopnningsvis) få svar på eventuella funderingar och frågor kring hur man använder vissa verktyg.
Logga in på din Debian-burk, bestäm dig för var du vill sätta upp saker och var du kan tänka dig vilja placera ett flertal hundra megabyte av Android SDK och kör:

  1. Installera Ant
  2. Installera Java Compiler (Jag använder openjdk-6-jdk)
  3. Ladda ner Android SDK:t (http://developer.android.com)
  4. Se till att Android SDK:t finns i din Path
  5. I SDK-mappen, kör: android update sdk –no-ui
  6. Checka ut/Kopiera ut ditt Android-projekt till en lämplig mapp på servern. Denna fungerar som bas för byggena
  7. Kör: android update project –path [sökväg till projektet] –target [Android build target] (Headless- Android-kommandostöd)
  8. Kör: ant

Så, nu bör du iallafall kunna bygga projektet genom Ant, vilket innebär att du är såhär [] nära att kunna fixa automatbyggebitarna.
Jag kan ge ett exempel på ett bash-skript jag kör, så du har något att utgå ifrån:

#!/bin/sh
cd /home/drlaban/projects/banjolejon
git checkout development //Kan vara vilken branch som helst
git reset --hard HEAD //Ser till så att det under inga omständigheter finns någon form av ändringar kvar innan bygget (man kan aldrig vara säker)
git pull
rm build.xml //Den här tas bort då den verkar fela då och då när man fösöker uppdatera sitt Android-projekt
android update project --path . //Uppdaterar Android-projektet, bygger build.xml
ant clean //Tar bort allt gammalt Ant-skröfs som ligger och skräpar
ant debug //Bygger nu hela projektet med Ant. Tar lite tid beroende på storlek
cp /home/drlaban/projects/banjolejon/bin/banjo-debug.apk /storage/dump/banjo-daily.apk

Sådär! Då har ni fått grunden för det här. Jag har gjort det och testat det och har till synes fått det att fungera. Så det borde du med kunna göra.

OBS! Detta bygger bara debug-versioner av din applikation. För att kunna bygga livliga applikationer måste man signera dem. Det står beskrivet i den första länken hur man kan gå till väga där.

Internationalisera WordPress… wth

Det märks att WordPress är något av ett monster att ha att göra med när man sitter och moddar och har sig.
Jag försökte vara ett så gott stöd som möjligt till Emma Ekberg i hennes strävan att få en svensk blogg. Jäklar i min låda vilket härke det är att försöka navigera sig mellan WordPress, internationalisering och temastruktur.
Några nyckelord

  • WordPress
  • Translation
  • Themes
  • Domain
  • __([String])
  • __(String, Domain)
  • Översättningsfiler (.po, .mo)

Egentligen är det __() och Domain som är de absolut viktigaste där. Vad jag lyckades slutleda mig till efter ett par timmars parprogrammerande var att man måste hålla på att latja lite med översättningsfunktionen __() och de argument man skickar in. Om en översättning inte ser ut att fungera till kommandot __(“Översätt den här strängen”, “Korv”), då kan man behöva skriva in nyckelorden man försöker översätta i .po/.mo-filerna som tillhör temat, eller ändra argumenten som man skickar in i __(), eller en kombination av båda. Ibland kan det vara enklare att helt enkelt strunta i att inkludera en domän och sätta in översättningen direkt i WordPress egna .po/.mo-filer. Givetvis med en risk att det kan försvinna när man uppgraderar WordPress, men hell, det som funkar, det funkar.
Det är enastående vad rörigs saker kan bli när det inte sätts in några strikt upprätthållande regler för tex översättning när temaskapare sitter och knackar hemma på kammaren.