Visualizzazione stampabile
-
7b - BOOT.IMG
Recatevi per prima cosa al percorso lib/modules e cancelliamo solo i moduli come da selezione nello screen sotto
Dovremo rimpiazzarli con quelli appena compilati, vediamo come.
Avviate il terminale e recatevi al percorso android/source/drivers utilizzando terminale.
Digitate il comando
codice:
cd android/source/drivers
Adesso vedrete che Linux è davvero potente: esiste un comando che consente di trovare tutti i files con una determinata estensione e di copiarli in una determinata directory ;)
codice:
find . -name "*.ko" -exec cp {} /home/nome_utente/android/bootimg-tools/out/ramdisk/lib/modules/ \;
Se avete pratica di inglese capirete benissimo cosa avviene: il comando troverà tutti i files con estensione .ko (che sono i moduli) e li copierà nel percorso specificato alla fine della stringa. Da standing ovation.....
Controllate che i file siano stati copiati nella destinazione.
NOTA: L'operazione di sostituzione dei moduli descritta va eseguita SEMPRE, ad ogni ri-compilazione. Preciso che è tuttavia possibile disattivare il versioning durante la compilazione, proprio per evitare un non matching delle magic strings. Ma non è conveniente in quanto sarebbe difficile eseguire un corretto tracking delle varie modifiche eseguite sul codice sorgente dei moduli.
La modifica della ramdisk può dirsi conclusa (per il momento). Il passo successivo è la ri-compressione della ramdisk.
E' necessario ESSERE nel percorso in cui si trovano i files da comprimere; da terminale:
codice:
cd android/bootimg-tools/out/ramdisk
e lanciamo il seguente comando
codice:
find . | cpio -o -H newc | gzip > /home/nome_utente/android/bootimg-tools/ramdisk.cpio.gz
Verrà creato un archivio con estensione .cpio.gz al percorso indicato alla fine della stringa delle dimensioni di circa 1 megabyte.
Rinominate il file da
a
Ora va creata la boot.img unendo assieme il kernel e la ramdisk appena compressa.
Usando il file explorer recatevi in android/source/arch/arm/boot e copiamo il file zImage, che abbiamo ottenuto dalla compilazione dei sorgenti, all'interno della cartella "bootimg-tools", in modo da avere sia il che kernel (zImage) che la ramdisk (initrd.img) nello stesso percorso in cui sono contenuti gli "attrezzi".
Accertiamoci di essere con il terminale all'interno del percorso dove si trovano i files di cui sopra, nell'eventualità spostiamoci con il comando cd
codice:
cd android/bootimg-tools
Lanciamo il comando
codice:
./mkbootimg.Linux.x86_64 --kernel zImage --ramdisk initrd.img -o newboot.img --base 0x10000000
SPIEGAZIONE: Il comando lancerà l'eseguibile "mkbootimg.Linux.x86_64" contenuto nella cartella che assemblerà un --kernel (che in questo caso si chiama "zImage") una --ramdisk (che in questo caso si chiama "initrd.img") creando una "newboot.img". Il nome finale "newboot.img" è stato impostato di proposito con il prefisso "new" per evitare di fare confusione con altri files. Occorrerà rinominarlo semplicemente in "boot.img" successivamente.
!!FONDAMENTALE!! : La parte finale della stringa
codice:
--base 0x10000000
indica un codice che è univoco per il device in questione. E' importantissimo non dimenticarsi di specificarlo e soprattutto di non commettere errori di digitazione se vogliamo che la boot.img funzioni correttamente.
L'ultimo passo è creare un file zip da flashare in recovery.
Se vi serve uno zip come struttura potrete scaricare QUESTO, contiene una cartella meta-inf con tutto quello che serve per creare uno zip flashabile da recovery CWM o simili.
Scaricate dunque lo zip ed estraetelo dove vi pare, l'importante è che vi ricordiate dove si trova.
Create una nuova cartella nel work tree chiamandola ad esempio "zip-recovery"
Adesso copiamo la cartella estratta meta-inf all'interno di "zip-recovery" e copiamo anche il file "newboot.img" creato qualche minuto prima.
Rinominiamo il file in . In sostanza dovremmo ottenere qualcosa di simile a quello mostrato nel seguente screen.
Spostiamoci con il terminale nella cartella mostrata sopra
codice:
cd android/zip-recovery
E lanciamo questo comando
codice:
zip -r pirla-kernel ./
Verrà creato uno zip con il nome indicato nel comando, in questo caso "pirla-kernel" che sarà pronto per essere flashato dalla recovery.
TIP: Per evitare di fare confusione con le varie builds del kernel che partorite di volta in volta, potrete ad esempio sostituire il nome dello zip con la data, l'ora, i minuti e i secondi in cui viene creato lo zip.
Semplicemente con
codice:
`date +"%Y-%m-%d-%H-%M-%S"`
apici compresi, mi raccomando.
Per completezza ecco il comando finale
codice:
zip -r `date +"%Y-%m-%d-%H-%M-%S"` ./
Lo zip creato avrà un nome abbastanza esplicativo e privo di ambiguità.
Abbiamo finito, se tutto è andato bene avrete compilato dalla a alla z il vostro primo kernel.
.....To be continued......
-
per finire riservo anche questo post.
-
Azzz
E qui mi tocca contribuire allora:sly:
-
Non essendo megalomane ne prendo solo un altro:D
P.s.
Umberto ovviamente non mi riferisco a te;)
TASTI SOFT KEY
Ho notato che su questa semplice mod, di cui forse sono stato il primo a proporla:D , regna una certa confusione in quanto spulciando le varie mods di questo tipo che girano in rete la cosa che le accomuna è il copia e incolla (spesso inutile)del codice in questione........
Prendendo come esempio l' xml di sotto (clock al centro) notiamo che in esso è contenuto il codice per far apparire nell'angolo destro della statusbar il tasto/ icona " power".
Ecco il codice in particolare:
codice:
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/back" android:paddingLeft="0.0dip" android:paddingRight="0.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lock" android:contentDescription="@string/accessibility_back" systemui:keyCode="26" systemui:glowBackground="@drawable/ic_sysbar_highlight" />
L'unica cosa in questo caso(sintassi xml obbligatoria a parte) che permette al tastino power(erroneamente chiamato "back" :) ) di funzionare è questo comando: systemui : keycode="26" che fa riferimento alla classe/oggetto" KeyEvent " nella quale sono stati definiti alcune costanti a cui corrispondono la pressione di alcuni tasti fisici e non......come nel suddetto caso il tasto power.
Quindi se volessimo privare di inutili orpelli il codice preso come esempio otterremmo:
codice:
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/power" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lock" systemui:keyCode="26" />
Per chi volesse dare sfogo alla propria creatività(ad esempio creare un lettore musicale nel menu a tendina:P ) ecco i keycode disponibili ad oggi:
KeyEvent | Android Developers
N.B.
Fare riferimento ai numeri e non alle lettere i codici iniziano da metà pagina in poi ;)
P.s.
systemui:glowBackground="@drawable/ic_sysbar_highlight" non è da considerarsi un orpello ed inoltre non lo si vede in giro....per capici si tratta dell'ombra di backgroud quindi in realtà molto scenografico.....ma eventualmente farò un post a parte se interessa:-$
Ciauz
-
COME METTERE IL CLOCK AL CENTRO
:
Cercherò di spiegare perchè il clock va a centro concettualmente,poi il codice è relativo......
Detto in soldoni noi andiamo ad incastonare il clock tra due Layout cioè le icone di notifica(mail,tapatalk...ecc) a sinistra e le icone di sistema(batteria,segnale...ecc)a destra ,attribuendo ad entrambi lo stesso Weigth(peso) cioè immaginate questi gruppi di icone che si spingono a vicenda con uguale intensità, e in mezzo c'è il nostro clock:p
il risultato è appunto l'orologio al centro:cool:
Senza addentrarmi troppo nella teoria(ma se richiesto posso essere più tecnico;) ) andiamo a vedere come implementare il suddetto concetto:
Usiamo essenzialmente Linear Layout:TIPS(LinearLayout è un gruppo di finestre (una sottoclasse di ViewGroup ) che mostra le finestre figli(child View) in un orientamento verticale o orizzontale, come specificato dal "android: orientation" degli attributi. Ogni figlio di un LinearLayout appare sullo schermo nell'ordine in cui appare nel codice XML)
gli attributi WEIGHT(peso): android: layout_weight TIPS( Questo attributo assegna un valore "importanza" di una visione in termini di quantità di spazio dovrebbe occupare sullo schermo. Un valore di peso più grande permette di espandersi per riempire tutto lo spazio rimanente nella finestra padre.)
e WIDTH(larghezza):android:layout_width TIPS(attributo che nel caso di "wrap_content" utilizza solo la larghezza nativa(Es:una foto 24x24 userà 24 pixel come larghezza),mentre nel caso "fill_parent"userà tutta la laghezza disponibile del Layout padre)
utilizziamo come esempio una mod che feci per l'S4 di un caro amico:)
l'xml in questione è status_bar.xml e ho evidenziato:
in rosso:LinearLayout Padre(tutta la status bar)
in viola LinearLayout figlio(icone a sinistra)
in verde LinearLayout figlio(CLOCK)
in blu LinearLayout figlio(icone di destra)
in arancione gli attributi WIDTH e WEIGHT da usare per il nostro obiettivo
in LinearLayout figlio(icone a destra)
codice:
<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.statusbar.phone.PhoneStatusBarView android:orientation="vertical" android:id="@id/status_bar" android:background="@drawable/carotix_statusbar_bg" android:focusable="true" android:fitsSystemWindows="true" android:descendantFocusability="afterDescendants"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui">
<ImageView android:id="@id/black_bg" android:background="#ff000000" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="fill_parent" />
<ImageView android:id="@id/notification_lights_out" android:paddingLeft="6.0dip" android:paddingBottom="2.0dip" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" />
<LinearLayout android:orientation="horizontal" android:id="@id/status_bar_contents" android:paddingLeft="6.0dip" android:paddingRight="6.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal" android:id="@id/notification_icon_area" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0" android:alpha="0.8">
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/back" android:paddingLeft="0.0dip" android:paddingRight="0.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lock" android:contentDescription="@string/accessibility_back" systemui:keyCode="26" systemui:glowBackground="@drawable/ic_sysbar_highlight" />
<TextView android:textSize="15.0dip" android:textColor="#fff71a1a" android:gravity="center_vertical" android:id="@id/carrierLabel" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />
<ImageView android:id="@id/operatorLogoIcon" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/tw_stat_notify_operator_logo" />
<com.android.systemui.statusbar.StatusBarIconView android:id="@id/moreIcon" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/stat_notify_more" />
<com.android.systemui.statusbar.phone.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
</LinearLayout>
<LinearLayout android:gravity="center" android:orientation="horizontal" android:id="@id/clock" android:layout_width="wrap_content" android:layout_height="fill_parent">
<com.android.systemui.statusbar.policy.Clock android:textSize="20.0dip" android:textColor="#ffbebebe" android:ellipsize="none" android:gravity="center" android:id="@id/clock" android:paddingLeft="1.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginTop="0.0dip" android:singleLine="true" android:includeFontPadding="false" />
</LinearLayout>
<LinearLayout android:gravity="right|center" android:orientation="horizontal" android:id="@id/system_icon_area" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0" android:alpha="0.8">
<LinearLayout android:gravity="right" android:orientation="horizontal" android:id="@id/statusIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />
<LinearLayout android:gravity="right" android:orientation="horizontal" android:id="@id/signal_battery_cluster" android:paddingLeft="2.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent">
<include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />
<TextView android:textSize="12.0dip" android:textColor="#fff71a1a" android:layout_gravity="center" android:id="@id/battery_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/status_bar_network_name_separator" />
<ImageView android:gravity="right" android:id="@id/battery" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:id="@id/ticker" android:paddingLeft="6.0dip" android:animationCache="false" android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageSwitcher android:id="@id/tickerIcon" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="@dimen/status_bar_icon_size" android:layout_marginRight="4.0dip">
<com.android.systemui.statusbar.AnimatedImageView android:layout_width="@dimen/status_bar_icon_size" android:layout_height="@dimen/status_bar_icon_size" android:scaleType="centerInside" />
<com.android.systemui.statusbar.AnimatedImageView android:layout_width="@dimen/status_bar_icon_size" android:layout_height="@dimen/status_bar_icon_size" android:scaleType="centerInside" />
</ImageSwitcher>
<com.android.systemui.statusbar.phone.TickerView android:id="@id/tickerText" android:paddingTop="2.0dip" android:paddingRight="10.0dip" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="1.0">
<TextView android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" android:textColor="#ffffffff" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" />
<TextView android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" android:textColor="#ffffffff" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" />
</com.android.systemui.statusbar.phone.TickerView>
</LinearLayout>
</com.android.systemui.statusbar.phone.PhoneStatusBarView>
Semplice......NO? :D
per eventuali dubbi io sono qui......impegni permettendo:)
per chi volesse approfondire questi semplici concetti:
Linear Layout | Android Developers
-
porca miseria!!qua si fa sul serio usti!!
-
Quote:
Originariamente inviato da
darboc
Azzz
E qui mi tocca contribuire allora:sly:
Bravo... l'hai capita. Non partire con le tendine trasparenti però... ehehhe
-
Quote:
Originariamente inviato da
MrGlonass
Bravo... l'hai capita. Non partire con le tendine trasparenti però... ehehhe
Te piacerebbe.....eh.......sporcaccione:D
-
Quote:
Originariamente inviato da
darboc
...omissis...
L'unica cosa in questo caso(sintassi xml obbligatoria a parte) che permette al tastino power(erroneamente chiamato "back" :) ) di funzionare è questo comando: systemui : keycode="26" che fa riferimento alla classe/oggetto" KeyEvent " nella quale sono stati definiti alcune costanti a cui corrispondono la pressione di alcuni tasti fisici e non......come nel suddetto caso il tasto power.
Quindi se volessimo privare di inutili orpelli
...omissis...
Grande topic complimenti!
A volte gli inutili orpelli sono messi dai dev appositamente per vedere chi copia in maniera bovina ahhahahahah (piccole soddisfazioni godute in privato)
Il mio system ui è pieno di orpelli e png inutilissime ahhahahahahaha
-
Quote:
Originariamente inviato da
soloilmeglio
Grande topic complimenti!
A volte gli inutili orpelli sono messi dai dev appositamente per vedere chi copia in maniera bovina ahhahahahah (piccole soddisfazioni godute in privato)
Il mio system ui è pieno di orpelli e png inutilissime ahhahahahahaha
Grazie. :)
Allora possiamo contare sul tuo contributo? :p