recoveryのいくつかの開発点滴

6278 ワード

前にAndroidのrecoveryの基本的な知識を話しました.仕事の中で、しなければならないのはいつも標準recoveryに対していくつかのカスタマイズをして、だからこの文章は、この時間のいくつかの心得を記録します:
1、増分アップグレード:
ソースコードルートディレクトリの下で自分でmake otapackageを作成すると、アップグレードパッケージが生成され、2回のコンパイル後に次のツールが使用されます:./build/tools/releasetools/ota_from_target_files-n-i<古いパッケージ><新しいパッケージ><差分パッケージ名>で、インクリメンタルアップグレードパッケージを作成できます.ここでは、中間生成されたパッケージを使用する必要があります.改善方法:前に述べたように、簡単なLinuxスクリプトを自分で書いて、修正したアップグレードスクリプトとファイルをパッケージ化して署名することで、ソースコードの直接make otapackageよりも効率が高く、柔軟になります.このバージョンではAPKが1つか2つ増えただけで、スクリプトでシステムパーティションにmountで掛けることができます->package_extract_fileはAPKを作成したディレクトリに直接解凍します.
2、スクリプトコマンドを追加する:
たとえば、このバージョンは前のバージョンのsystem/app/次のAPKを削減したいと思っています.スクリプト解析器にdeleteのコマンドを自分で追加できれば.たとえば、設定コマンドのインタフェースを増やしてfastbootにコマンドを送信し、recoveryシステムにfastbootにfastbootでしかできない仕事を完了させるようにします.(1)当時、recoveryでパーティションを再分割する機能を追加するように要求された仕事がありました.この仕事はfastbootでしかできないので、私はそうしました.(2)また、出荷時の設定を復元した後、fastbootのenvを再設定する必要がある場合があります.本格的な出荷時といえば、recoveryにfastbootにenvを再設定するように伝えます.
3、アップグレード時の画面を修正する:
これは基本的に毎回しなければならないので、アンドロイドの元のrecoveryを使うだけであれば、ソースコードの下でbootable/recovery/res/imagesに行って画像を交換し、位置と簡単な細部を修正すればいいのです.しかし、その実現を理解してもいいです.
Recovery UI  recovery   recovery.cpp main 
    Device* device = make_device();       
    ui = device->GetUI();
    gCurrentUI = ui;

    ui->Init();
    ui->SetLocale(locale);
    ui->SetBackground(RecoveryUI::NONE);
if(show_text) ui->ShowText(true);

(1)まず、UIを呼び出す操作(2)Deviceクラスを呼び出すGetUI()を含むいくつかの操作をカプセル化したDefaultUIクラスのオブジェクトが新たに作成され、recoveryでは3つのUIクラスに関連し、3つのクラスの間には継承関係があり、それぞれDefaultUI、ScreenRecoveryUI、RecoveryUI(3)DefaultUIクラスを呼び出すInit()であり、DefaultUIクラスにはInit()メソッドがなく、したがって、親クラスScreenRecoveryUIを呼び出すInit()4)は同じであり、ScreenRecoveryUIクラスのSetLocale()を呼び出していくつかの比較的特別な領域を識別する(5)は同じであり、ScreenRecoveryUIクラスのSetBackground()を呼び出して初期状態を設定する背景図(6)は、Recoveryのメインインタフェースである選択メニューgraphicsを示す.cいくつかのインタフェースが与えられ、これらのインタフェースはPixelflingerのソースコードが与えたインタフェースを呼び出し、以下は一部のインタフェースである.Pixelflingerライブラリを使用してレンダリングを行います.minui部分インタフェースの説明を添付し、参考にします.
int gr_init(void);            /*        ,       、    、        */ 
void gr_exit(void);           /*       ,          */   
int gr_fb_width(void);        /*         */ 
int gr_fb_height(void);       /*         */ 
gr_pixel *gr_fb_data(void);   /*             */ 
void gr_flip(void);           /*        */ 
void gr_fb_blank(bool blank); /*    */ 
void gr_color(unsignedcharr, unsignedcharg, unsignedcharb, unsignedchara); /*      */ 
void gr_fill(intx,inty,intw,inth); /*       ,          、       */ 
int gr_text(intx,inty,constchar*s); /*       */ 
int gr_measure(constchar*s);            /*                    */ 
void gr_font_size(int*x,int*y);        /*                 */  
void gr_blit(gr_surface source,intsx,intsy,intw,inth,intdx,intdy); /*    source      */ 
unsigned int gr_get_width(gr_surface surface);  /*        */ 
Unsigned int gr_get_height(gr_surface surface); /*        */ 
/*             ,name    mk          */ 
int res_create_surface(constchar* name, gr_surface* pSurface); 
void res_free_surface(gr_surface surface);      /*        */ 

screen_ui.cppは設定の流れを与え,このコードを追跡して表示の方法を知ることができるが,文字を表示するインタフェースはshowtextがTRUEの場合に表示されなければならないので,この方法でプロセスインタフェースと選択インタフェースの変換を実現する.
4、フォントの変更
字体は面倒でしょう.私が字体を修正したとき、面倒だと思っていたのを覚えています.いい方法があるかどうか分かりません.私の方法:まずgraphics.cファイルでフォントヘッダファイルを変更します.そして:(1)recovery/miniuiにヘッダファイルを作成するソースmkfontがある.c,/recovery/fontにフォント画像がありgimpツールでmkfontを得る必要がある.c必要な構造体をコンパイルする.注意gimp出力.cファイルの場合、すべてのオプションを選択しないでください.(2)作成するフォントファイル.hの不足は、ベースカラーとフォントカラーの問題である.mkfontを変更します.cファイルは逆出力にすればよい.(3)graphics.cファイルのstatic void gr_init_font(void)/フォント関数はフォントの初期化です.ここではフォントヘッダファイルのフォントを判断し、しきい値0 x 80に基づいて透明度を選択します.ソースコードのデフォルトは255です.だから、どのように色を変えても、最後は黒(4)の色の修正は3点目の部分を修正してからint gr_text(int x,int y,const char*s)gr_color(255,255,255,252);
5、言語
时には、机械は异なる国に、recoveryも异なる言语を表示することを要求して、それではこの関数を使います:SetLocale、この関数はlocaleによって使うフォントがアラビア语系に属するかどうかを判断して、アラビア语の书く习惯は右から左で、アラビア语系ならば、1つのマークを设置して、后でこのマークによって右から左まで文字あるいは进度の条を表示することを决めます.SetLocaleのパラメータlocale付与ロジックは、まずcommandファイルから読み出し、commandファイルにlocaleを設定するコマンドは「–locale=zh_CN"は、localeに転送されていない場合、初期化中に/cache/recovery/last_localeからlocaleを読み込もうとしますが、ファイルもない場合、localeは付与されず、デフォルトでEnglishを使用します.これもsettingで設定されており、envがfastbootに保持されるように設定されています.
6、recoveryバックアップパーティション
7、バックアップとバックアップのリカバリを増やす
8、最初のアップグレードパッケージを回復する二つの方案
9、ハードウェア情報とソフトウェア情報