Compilare Android: Preparazione Sorgenti

Aggiornamento 26/12/09 Se si sta cercando di compilare la versione 2.0 Eclair di android tenere conto delle note per ogni paragrafo e dell’articolo di aggiornamento a riguardo qua.

Aggiornamento 21/08 Proprio fra ieri e oggi è arrivata la notizia che la comunità è riuscita con il reverse enginering a creare un kernel completamente compatibile con i 32A più info qua.

Prima di due parti sulla compilazione fatta in casa di android direttamente dai sorgenti forniti da Google. Come sappiamo Android è software libero, ma la particolare licenza (Apache 2.0) permette ai produttori di cellulari di fare qualche porcata con un pò di software proprietario qua e là sparso per i nostri cellulari.

Android crediti
crediti

Per questo la compilazione di Android a seconda del dispositivo dove poi andrà installato può essere delicata. Io prenderò il caso dell’HTC magic 32B (vodafone), attualmente solo con cellulari “With Google”  è possibile usare versioni ricompilate del kernel. Questo perchè HTC non ha ancora rilasciato i sorgenti dei kernel usati nei cellulari con firmware customizzato da loro, per ora quindi non sappiamo cosa abbiano di spaciale i kernel HTC. (sicuramente una gestione della memoria diversa)

Non chiedetemi i vantaggi nel ricompilarsi Android, forse di strettamente pratici non ce ne sono o meglio io ne noto ma potrebbe essere solo suggestione 🙂 (batteria che ha una seconda vita e sistema più leggero) in ogni caso è sempre divertente cercare di andare a fondo delle cose e crearsi un “proprio” Android aiuta a capirne bene il funzionamento.

Scrivo subito qui che la maggior parte dei crediti vanno a questo blog, le modifiche per l’htc magic però ci sono e sono abbastanza importanti, oltre anche ad altri adattamenti che ho fatto. Iniziamo!

Preparare il sistema

L’environment che ho usato per la prova è Ubuntu 9.04, credo però che non sia difficile adattare le istruzioni per altre linux box.

Scarichiamo i pacchetti necessari

sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind

Impostiamo come jvm predefinita la 1.5 necessaria ad Android.

update-java-alternatives -s java-1.5.0-sun

Ora quindi il comando java -version dovrebbe restituirvi

java version "1.5.0_19"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_19-b02)
Java HotSpot(TM) Server VM (build 1.5.0_19-b02, mixed mode)

Scaricare i sorgenti

Devo dire la verità che non ho ancora una grande dimestichezza con il sistema di gestione dei sorgenti di Android e lo trovo un pò incasinato. Comunque ci limitiamo a semplici istruzioni.

Scarichiamo il tool repo necessario al download dei sorgenti e mettiamo tutto in una cartella chiamata androidsource.

mkdir ~/androidsource

curl http://android.git.kernel.org/repo > ~/androidsource/repo

chmod a+x ~/androidsource/repo

Inizializzamo il client repo, conviene sempre specificare con quale branch si desidera lavorare, prendiamo l’esempio di cupcake ma se si specifica donut non ci dovrebbero essere grosse differenze nei comandi futuri.

cd ~/androidsource

./repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake

Kernel

Questa parte può essere saltata se si usa un kernel precomplato, ma visto che ci siamo facciamola completa e ricompiliamoci il kernel! 😀

Per scaricare il kernel adatto ai nostri cellulari modifichiamo il file local_manifest.xml dentro alla cartella .repo

nano ~/androidsource/.repo/local_manifest.xml

E incolliamo

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.29"/>
</manifest>

Al posto del 2.6.29 volendo si può mettere il 2.6.27.

Download

Siamo pronti per iniziare il download 😉

cd ~/androisource

./repo sync

Ci vorrà un bel pò!

File proprietari

Nota per Eclair guardare qua.

Possiamo prendere i file proprietari necessari per il corretto funzionamento di Android sul nostro telefono direttamente dal telefono stesso. Per farlo basta eseguire lo script extract-files.sh. Bisogna però prima preparare il sistema con le modifiche necessarie per il corretto funzionamento di Android col Magic.

In ~/androidsource/vendor/htc/ ci sarà una cartella chamata dream-open, lì ci sono tutti i file pronti per l’Htc Dream, copiamo il contenuto in una nuova cartella chiamata sapphire.

Scaricate questo archivio creato da me, sostituite i file dentro alla cartella appena creata sapphire e eliminate tutti i file che hanno “trout” nel nome.

Lo script extract-files.sh cerca il comando adb, copiamo quindi temporaneamente il file binario adb dal proprio sdk di android alla cartella di sistema /usr/bin/ ed eseguiamo lo script che scaricherà i file proprietari. (l’esecuzione dello script potrebbe avere bisogno dei permessi di root)

Finito, siamo pronti a compilare!

12 risposte a “Compilare Android: Preparazione Sorgenti”

  1. cercavo una guida così…

    ma se il telefono non è google experience, quindi un htc magic della tim i repo del kernel non sono diversi?!

  2. (comunque non uso ne safari ne mac!)

  3. lol..cosa usi? colpa del plugin…

    Chi non ha cellulari “With Google” deve semplicemente procurarsi i sorgenti in altri modi. Può ovviamente usare un boot.img di altre versioni di android per il suo cel oppure prendere i sorgenti se disponibili e compilarseli.
    Non credo che rendano disponibili i sorgenti HTC sui server Google

  4. in quel momento usavo semplicemente Chrome, ora Mozilla e Ubuntu.
    Il Kernel per il magic 32a è disponibile sul server HTC..sto provando a cimentarmi però con kernel di cyanogen e quello di TigerTeal (che lo ha portato sul 32a).

  5. Bella guida!!! complimenti. E’ propprio necessario usare java 1.5?

    PS vogliio vedere il tuo “plugin” come interpreta il mio browser

    mandi

  6. per cupcacke e donut si era necessario, appena si riuscirà ad avere una eclair completamente funzonante su dream/magic proverò ad aggiornare
    p.s. ho cambiato plugin, l’altro non veniva più sviluppato

  7. ciao, ho seguito la guida, solo che al momento di dare

    $./repo init -u git://android.git.kernel.org/platform/manifest.git

    ottengo questo…

    Traceback (most recent call last):
    File “/home/stefano/bin/repo”, line 595, in
    main(sys.argv[1:])
    File “/home/stefano/bin/repo”, line 562, in main
    _Init(args)
    File “/home/stefano/bin/repo”, line 181, in _Init
    _CheckGitVersion()
    File “/home/stefano/bin/repo”, line 210, in _CheckGitVersion
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    File “/usr/lib/python2.6/subprocess.py”, line 621, in __init__
    errread, errwrite)
    File “/usr/lib/python2.6/subprocess.py”, line 1126, in _execute_child
    raise child_exception
    OSError: [Errno 2] No such file or directory

    qualche idea?

  8. ciao…l’ho appena fatto su una cartella vuota e funziona

    bho forse era qualche problema temporaneo con i server google

  9. in effetti ora funziona.. grazie mille 😉

  10. A me da lo stesso problema di stefano

  11. […] <- jabber/mail http://twitter.com/monossido <-twitter compilare android da sorgenti -> http://www.lorenzobraghetto.com/inde…ione-sorgenti/ tutte le mie applicazioni -> […]

  12. 百万博客 -Many subjects relevant to life and living are not taught in school. One of them is ‘How to Get Rich’.

Lascia un commento