{"id":650,"date":"2009-08-20T16:01:23","date_gmt":"2009-08-20T15:01:23","guid":{"rendered":"http:\/\/www.lorenzobraghetto.com\/?p=650"},"modified":"2009-12-26T17:54:44","modified_gmt":"2009-12-26T16:54:44","slug":"compilare-android-compiliamo","status":"publish","type":"post","link":"https:\/\/www.lorenzobraghetto.com\/index.php\/2009\/08\/20\/compilare-android-compiliamo\/","title":{"rendered":"Compilare Android: Compiliamo!"},"content":{"rendered":"<p><strong>Aggiornamento 21\/08 <\/strong>inserita soluzione al problema dello &#8220;skip&#8221; del SetupWizard<\/p>\n<p>Seconda parte sulla compilazione <em>fatta in casa<\/em> di android direttamente dai sorgenti forniti da Google. Una volta che i sorgenti sono pronti possiamo procedere a compilare.<\/p>\n<h1>Kernel<\/h1>\n<p>Compiliamo il kernel con questi comandi, dobbiamo esportare delle variabili, da ora in poi per compilare conviene rimanere nello stesso terminale se non si vuole ri-esportare queste variabili.<\/p>\n<p><code>cd ~\/androidsource\/kernel<br \/>\nexport ARCH=arm<br \/>\nexport CROSS_COMPILE=arm-eabi-<br \/>\nexport PATH=$PATH:~\/androidsource\/prebuilt\/linux-x86\/toolchain\/arm-eabi-4.2.1\/bin<br \/>\ncp arch\/arm\/configs\/msm_defconfig .config<br \/>\nmake oldconfig &amp;&amp; make<\/code><\/p>\n<p>In questo modo si user\u00e0 un config standard, un&#8217;alternativa potrebbe essere quella di prendere il config da un&#8217;altra rom, per esempio dalla Cyanogenmod (sempre che si abbia scelto di usare kernel 2.6.29). Ovviamente \u00e8 possibile anche farsi un proprio config con make menuconfig<\/p>\n<p>L&#8217;immagine del kernel risultante sar\u00e0 in <em>~\/androidsource\/arch\/arm\/boot\/zImage .<\/em><br \/>\n<!--more--><\/p>\n<h1>Wifi<em> <\/em><\/h1>\n<p>Fortunatamente il modulo wlan.ko del wireless non \u00e8 proprietario quindi possiamo compilarci una nostra versione per il nostro kernel.<\/p>\n<p><code>cd ~\/androidsource\/system\/wlan\/ti\/sta_dk_4_0_4_32<br \/>\nexport KERNEL_DIR=~\/androidsource\/kernel\/<br \/>\nmake<\/code><\/p>\n<p>copiamo il modulo al posto giusto sostituendo quello prercompilato<\/p>\n<p><code>cp wlan.ko ~\/androidsource\/vendor\/htc\/sapphire\/<\/code><\/p>\n<p><strong>Nota<\/strong> attualmente con kernel 2.6.29 in cupcake la compilazione del modulo wlan.ko fallisce, la soluzione \u00e8 applicare questa patch:<\/p>\n<p><code>cd ~\/androidsource\/<br \/>\n.\/repo download platform\/system\/wlan\/ti 10344<\/code><\/p>\n<h1>Audio Files<\/h1>\n<p>I file audio come suonerie notifiche ecc&#8230; sono gi\u00e0 presenti ma di default non vengono incluse nella build, per farlo basta rinomiare un file cos\u00ec<\/p>\n<p><code>mv ~\/androidsource\/frameworks\/base\/data\/sounds\/OriginalAudio.mk ~\/androidsource\/frameworks\/base\/data\/sounds\/Android.mk<\/code><\/p>\n<h1>HTC Build Script<\/h1>\n<p><strong>Nota: <\/strong>Per Eclair attualmente questo procedimento non funziona.<\/p>\n<p>Lo script \u00e8 gi\u00e0 pronto se avete usato i miei file, bisogna solo scaricare gli apk di base per le applicazioni Google.<\/p>\n<p><code>cd ~\/androidsource\/vendor<br \/>\nmkdir google<br \/>\ncd google<br \/>\nwget http:\/\/www.lorenzobraghetto.com\/wp-content\/uploads\/extract-google-files.sh<br \/>\nchmod a+x extract-google-files.sh<br \/>\n.\/extract-google-files.sh<\/code><\/p>\n<p>Lo script va eseguito sempre con il telefono attaccato, prender\u00e0 solo le applicazioni base di Google.<\/p>\n<h1>Sistema<\/h1>\n<p><strong>Nota: <\/strong>Per Eclair guardare <a href=\"http:\/\/www.lorenzobraghetto.com\/index.php\/2009\/12\/26\/compilare-android-eclair\/\">qua<\/a>.<\/p>\n<p>Siamo quasi pronti per dare il make finale, basta creare un nuovo file <em>buildspec.mk<\/em> in ~\/androidsource e inserirci<\/p>\n<p><code>TARGET_PRODUCT:=htc_sapp<br \/>\nTARGET_PREBUILT_KERNEL:=kernel\/arch\/arm\/boot\/zImage<\/code><\/p>\n<p>In pi\u00f9 ho notato un problemino di permessi con wpa_supplicant, per risolverli apriamo il file ~\/androidsource\/system\/core\/rootdir\/init.rc e all&#8217;altezza di<\/p>\n<p><code># create basic filesystem structure<\/code><\/p>\n<p>inseriamo<\/p>\n<p><code># give system access to wpa_supplicant.conf for backup and restore<br \/>\nmkdir \/data\/misc\/wifi 0777 wifi wifi<br \/>\nchmod 0777 \/data\/misc\/wifi<br \/>\nchmod 0666 \/data\/misc\/wifi\/wpa_supplicant.conf<\/code><\/p>\n<p>Un altro piccolo problemino riguarda il SetupWizard, di default non \u00e8 possibile saltare il login con gmail, se non si ha un abbonamento a internet potrebbe essere dispendioso \ud83d\ude42 . La soluzione \u00e8 aggiungere<\/p>\n<p><code>ro.setupwizard.mode=OPTIONAL<\/code><\/p>\n<p>nel build.prop, lo si pu\u00f2 fare a mano alla fine del file una volta flashato il system.img nel cellulare oppure lo si pu\u00f2 inserire direttamente prima della compilazione nel file apposito htc_sapp.mk. Purtroppo questa seconda possibilit\u00e0, in linea teorica giusta, non ha funzionato. Un alternativa non proprio pulita \u00e8 mettere l&#8217;opzione in system.prop<\/p>\n<p>Ci siamo:<\/p>\n<p><code>make<\/code><\/p>\n<p>Come dice l&#8217;autore della guida da cui ho preso spunto, a questo punto meglio andare a giocare con la wii e tornare dopo un p\u00f2 \ud83d\ude09<\/p>\n<h1>Flashing<\/h1>\n<p>Il metodo pi\u00f9 semplice per flashare il nostro nuovo android \u00e8 usare il fastboot, dopo essere entrati in fastboot con il cellulare dare questi comandi dalla cartella tool dell&#8217;sdk (aggiungere <em>sudo <\/em>se necessario)<\/p>\n<p><code>.\/fastboot flash system ~\/androidsource\/out\/target\/product\/sapphire\/system.img<br \/>\n.\/fastboot flash userdata ~\/androidsource\/out\/target\/product\/sapphire\/userdata.img<br \/>\n.\/fastboot flash boot ~\/androidsource\/out\/target\/product\/sapphire\/boot.img<\/code><\/p>\n<p>Ovviamente questi comandi cancelleranno i dati presenti nel cellulare.<\/p>\n<p>Enjoy \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aggiornamento 21\/08 inserita soluzione al problema dello &#8220;skip&#8221; del SetupWizard Seconda parte sulla compilazione fatta in casa di android direttamente dai sorgenti forniti da Google. Una volta che i sorgenti sono pronti possiamo procedere a compilare. Kernel Compiliamo il kernel con questi comandi, dobbiamo esportare delle variabili, da ora in poi per compilare conviene rimanere [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,434,4,28,438,39,42,8],"tags":[405,92,810,435,460],"class_list":["post-650","post","type-post","status-publish","format-standard","hentry","category-informatica","category-android-software","category-aziende","category-google","category-htc-aziende","category-open-sourcefree-software","category-smanettamenti","category-software","tag-android","tag-compilare","tag-google","tag-htc","tag-sorgenti"],"_links":{"self":[{"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/posts\/650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/comments?post=650"}],"version-history":[{"count":9,"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/posts\/650\/revisions"}],"predecessor-version":[{"id":656,"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/posts\/650\/revisions\/656"}],"wp:attachment":[{"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/media?parent=650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/categories?post=650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lorenzobraghetto.com\/index.php\/wp-json\/wp\/v2\/tags?post=650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}