アプリケーションをファームウェアに追加する方法。 アンドロイドを使用したARMのシステム負荷

アンドロイドスマートフォンのほぼすべてのユーザーは、自分のニーズと欲望に合わせてファームウェアを作成または編集したいという欲求を持っていました。 この記事では、(zip形式の)CWMのファームウェアを編集する原則について検討します。

準備:

まず、どのファームウェアを基本として使用するかを決める必要があります。 それはオフを使用する方が良いです。 zipのファームウェア。 ほぼすべての共通デバイスにクリーンファームウェア+ルートがあります。
ファームウェアが選択されたら、PC上の任意の場所でダウンロードする必要があります(解凍しないでください)。
アーカイバも必要です。 7zip   その種類のテキストエディタのベスト メモ帳++.

ファームウェアの構造:

ファームウェアを使用してアーカイブを開くと、次のように表示されます。
META-INF   - このフォルダには、ファームウェアのインストールスクリプトが含まれています。
システム   - すべてのファームウェアファイル(アプリケーション、調整、スクリプトなど)を含むフォルダ。
boot.img   - システムの中核。

ほとんどすべての操作はフォルダ内で実行されます システムその構造:
アプリ   - システムアプリケーション。
ビン   - システム自体のリソース。
  - スクリプト、調整、設定、プロファイル、システム設定。
フォント   - システムフォント。
フレームワーク   - メインのシステムファイルがここに保存されます(グラフィック、テキストアニメーション設定など)。
lib   - システムライブラリ。
メディア   - マルチメディアファイル(通知メロディ、ダウンロードアニメーション、壁紙など)。
usr   - 設定はシステムによってさらに変更されません(「読み取り専用」モードで動作します)。
xbin   - もう一度、システム構成と他の調整。
build.prop   - システム、ロケール設定、システムパフォーマンスに関する情報。

アプリケーション:

システムにソフトウェアを追加/削除する前に、ファームウェアが無効になっているかどうかを確認する必要があります(つまり、アプリケーションフォルダ内に.odexファイルが存在するかどうかを確認する必要があります。ファイルがある場合は、 指示 .
ファームウェアにソフトウェアを追加する:
まず、スマートにアセンブリに追加するプログラムをインストールする必要があります。 インストール後に、システムを使用してそれらを取得します。 ルートエクスポージャー   そのアナログの場合、それらはdata / appパス上にあるので、データ/データパス上にあるかどうか(当然のことながら)必要になります。 彼らは同じ名前のアプリケーションフォルダにあり、拡張子を持っています .so   。 その後、押収された .apk   ファイルはシステム/アプリケーションパスのアーカイブに保存され、拡張子は .so (lib "s)はパスシステム/ libに沿っています。
ファームウェアからソフトウェアを削除します。
すべてがシンプルで、フォルダに移動します アプリ   - 不要なソフトウェアをすべて削除し、不要なソフトウェアをすべて削除します(システムは接触しないほうが良い)。

言語とファームウェアのバージョン:

build.propファイルをデスクトップにコピーします。 ノートブックでそれを開き、次の行を見つけます:

ro.product.locale.language = en
ro.product.locale.region =米国

ロシア語の場合は、これを行う必要があります:

ro.product.locale.language = en
ro.product.locale.region = RU

私たちはmodの名前を文字列に入力します

同じbuild.propで

グラフィックス:

ファームウェアのグラフィック部分全体は、2つのファイルframework-res.apkファイルパス システムフレームワーク   そして途中のSystemUI.apk システムアプリ。 また、設定アプリケーションのグラフィカルな部分は、Settings.apkアプリケーションに自然に格納されます。

スクリプトと調整(システムの加速と最適化):

ほとんどの設定はファイル内にあります。 build.propあなたはこれについて読むことができます。 あなたのカーネルがサポートしている場合

ARMアーキテクチャに基づいて作られたチップがシステムオンチップ(SoC)であるという簡単な言葉から始めましょう。 すなわち、それは単一のチップ上に実装された完全なコンピュータである。 このアーキテクチャのプロセッサは、多くのデバイス(ルータ、スイッチ、テレビ上の組み込みコンピュータ、ゲームポータブルコンソールなど)を作ります。

また、このアーキテクチャは、低消費電力と放熱特性を備えているため、スマートフォンやタブレットコンピュータなどのデバイスに非常に効果的です。

デバイスの正確なアドレッシングはこのレビュー記事の目的ではありません。 私はちょうど彼らのデバイスで何がされているのかをより完全に理解する基本原則に潜在的なmodderを導入したい。

そこで、このタイプのデバイスのダウンロードの説明に直接進みます。 ほぼすべてのARMプロセッサには、いわゆるフラッシュメモリが内蔵されています。 ローダー。 チップ上にそのようなメモリが存在しないか、またはブートローダーを見つけるためのスペースとして使用しない場合、チップは通常、このブートローダを厳密に定義されたアドレスのNORフラッシュに起動することを指します。

いくつかのダウンローダがあります。 それらの多くは商用である。 しかし、オープンソースのブートローダー、u-bootがあります。 残念ながら、コードが開いているときは、プロセッサに依存するコードが含まれているため、プロセッサの仕様がなければ、オープンなドキュメントを持たないプロセッサに単純に移植(適合)することはできません。

ここでは、ブートローダが起動した後に通常行うことについて説明します。 かなり直接的な類推は、x86プロセッサ(大部分の人がいるもの)に基づくコンピュータのBIOSで行うことができます。 起動時のARMローダは、同じ方法で、デバイスのハードウェア(RAM、データストレージ、ネットワークアダプタなど)の低レベル初期化も実行します。 シリアルポート(通常はRS232フォーマットで、3.2ボルト)を初期化した後、このポートで初期化されたコンソールから操作することができます。

それはこのように見える

このコンソールを使用すると、ハードウェアをほぼ完全に構成または再構成できます。 例えば、Linuxをロードするためには、ブート時にカーネルに渡されるパラメータの文字列を少なくとも再構成する必要があります(アンドロイドをダウンロードするためのデフォルト設定)。 また、そこでは、消去、分割、変更、書き込みからの保護、またはその逆などの、nandセクションで完全に作業できます。 等 (ナンダセクションの変更に関する追加の質問を避けるため)。 コンソールでも、ソフトウェアをダウンロードして実行できます。 このコンソールで行われたすべての設定は、デバイスの起動時に保存され、デフォルト設定として使用できます。

私たちは小さな逃げ道を作っています。 NORフラッシュに加えて、NANDフラッシュまたはSDカードを使用してブートローダの位置を特定することもできます。 さらに、これらのタイプのフラッシュメモリの組み合わせをデバイス内で使用することも可能です。 例えば、ブートローダはNORに配置することができ、内部のドライブ(OS配置用)としてNANDまたはSDなどとすることができる。

そこで、私たちは鉄片を入れました。 彼女はブートローダーをロードしました。 ローダーはハードウェアを初期化しました。 この初期化の最後に、ブートローダは次の手順を実行します。

1 - カーネルイメージとramdiskの両方を読んでメモリに置く - どちらも厳密に特定のアドレスにある(u-bootコマンドラインで設定できる)。

2 - 外部RAMディスク(initrdの)ルートファイルシステムとそれがINITとして使用を取る場合、彼に示し、適切なエントリーポイントを有する核を開始します。

RAMのもう1つの部分は、たとえばビデオコアのためにメモリを必要とするデバイスに割り当てられます。 ここで、デバイスのRAMの一部がどこで宣言されているかを理解します。

さらなるブートは、通常のコンピュータでのLinuxのブートとあまり変わりません。 起動後、カーネルは指定されたinitを実行します(これは単なる別のプログラムです)。 初期設定は、ramdiskにあるinit.rcファイルで実行されます。 環境変数の設定、ディスクデバイスのマウント、必要なサービスの開始など init.rcの実行前命令の最後に、アンドロイド自体が起動されます。 Androidの起動のタイプは、アンドロイドブートカーネルの起動オプションによって決まります。 アンドロイドの標準起動は、目的のramdisk(ramdisk.img)とパラメータandroidboot.normalを使用するパラメータを渡すことによって全体として実行されます。 リカバリモードを開始するには、通常、別のramdiskが使用され、リカバリプログラム(recovery.img内)とカーネルパラメータandroidboot.recoveryが含まれています。

アンドロイド用のLinuxカーネルのバリエーションとして、initrd(ラムディスク上のルートシステム)のサポートではなく、いわゆるinitrd initramfs この場合、ルートファイルシステム全体はカーネルのすぐ内側に配置されます。 この場合、リカバリモードには、通常、リカバリプログラムを含むルートファイルシステムを使用する第2のカーネルが必要です。 また、ブートローダの設定は、回復カーネルをロードして実行するのが簡単です

その結果、シンプルなスキーム:

プロセッサの起動 - \u003eブートローダの起動 - \u003eアイロンの初期化 - \u003eカーネルとramdiskからの読み込み - \u003eこのramdiskを使ったカーネルの起動 - \u003e initプログラムの実行 - \u003eアンドロイド自体の起動。

u-bootとそのコマンドについての詳細は、このwikiの_http://www.denx.de/wiki/view/DULG/Manualで読むことができます。

この情報では不十分な場合は、Documentation / kernel-parameters.txtのソースコードのアーカイブから、Linuxカーネルの起動パラメータについての詳細を読むことができます。 あるいは、必要なカーネルのバージョンについてインターネット上でこのファイルを見つけてください。 しかし、上記のAndroidの詳細を考慮に入れることを忘れないでください。

こんにちはハブ!

数年前、私がAndroidに初めて出会ったとき、私は仕事の同僚から、Androidが変更されたファームウェアまたは自作のファームウェアをインストールする機能を提供していると聞きました。 率直に言って、私はそれにはほど遠いです。 そして半年前でさえ、私はそんなことにほとんど関心がありませんでした。 シャワーの奥深くで、私はメーカーがやっていたことが、通常の使用のためにすでに意図されていたと確信していました。

Google、Skype、Facebookなどのアプリケーションの使用が工場設定で禁止されていた中国から携帯電話を購入したときの私の失望はどうでしたか? 原則として、いくつかの点で私の目を閉じることができましたが、私の電話ではGoogleアカウントの使用を暗示していないときに、私は必ずしもそうする必要がないことを約束しました。

半年が過ぎ、私のカスタムファームウェアは世界中でうまく使用されています。

この一連の記事では、Android用の逆プログラミングの方法、パッチ、調整、改造方法の実装方法について説明します。

プリアンブル

  そしてそう! 最初に使用される概念を定義しましょう 与えられた   記事。 しかし、あなたの通常の理解は、非常に異なる場合があります。

パッチ   - プログラムアルゴリズムを変更するために、既存のプログラムコードを変更または置換すること。
Mod   - 原則として、アルゴリズムを変更せずに既存のプログラムコードに機能を追加する。
微調整   システムパラメータへのアクセスを容易にするために、プログラムの機能を改善する。

また、すべての例がHTCの電話機で取られることに注意したいが、これは他の電話機でこの情報を使用できないことを意味するものではない。

以下の情報を使用した結果、お客様の携帯電話でデータが失われる可能性については、著者として責任を負いません。

環境整備

  私は、このソフトウェアやそのソフトウェアの使い方に関する詳細な指示なしに行うことができます。 この記事に興味があり、これらの行を読み終えたら、あなたは既に経験豊富なユーザーであり、この分野で、よく、あるいは少なくとも実験的な経験を持っていることを願っています。 しかし、Habréのように、説明書、記事、テスト結果は完全に利用可能です。 私はまた、いくつかの用語の説明なしで管理します。さもなければ、記事は非常に大きく退屈なものになります。 私たちはこのケースでのみ書きます。 私はあなたの環境が長い間立っていると確信しています。 そうでない場合は、ダウンロードしてインストールすることをお勧めします。

1 . Android SDK   。 これはAndroid向けのアプリケーション開発環境です。 変更を加えるために、我々は間違いなく私たちのプログラムコードをチェックする必要があります。 開発環境は私たちが使える最高のものです。
2 . Androidキッチン   。 このユーティリティを使用すると、公式ウェルまたは非公式ファームウェアのシステムパーティションのイメージを操作できます。
3 . Jd-gui   。 Java言語コード逆コンパイラ。 直ちに、私はこれが使いやすさの観点から最良の逆コンパイラであることに注意します。
4 . DJ Java Decompiler 。 別の逆コンパイラ、または逆アセンブラは、Javaプログラミングコードです。 使用に関しては便利ではありませんが、JD-GUIを理解できないコードを解析します。
5 . スマリ   。 別の逆アセンブラですが、すでにdalvikコードです。 逆アセンブルにはsmaliが必要であり、コードをアセンブルするにはバックスペースが必要です。
6 . dex2jar   。 実行可能ファイルを変換するためのユーティリティDalvikコード。

ファームウェア変換

  もちろん、製造元の電話機に搭載されているファームウェアは、エネルギー消費を削減するために最適化されています。 ファームウェアを変更できるようにするには、コードを変更できる形式に変換する必要があります。 Android Kitchenを使用しています。 私はこれを "キッチン"と見なすまで、以前と同じように、あなたの手で行えます。 システムエリアを電話から引き出し、環境を設定し、DEODEXファームウェアを作成し、インターネットで読むことができます。 あなたがまだ何かを理解していないなら、あなたは十分な経験を得るまで記事を延期すべきだと思います。

最適化されたビュー(ODEX最適化されたdalvik実行可能コード、メモリが私に役立つ場合)からのファームウェアがDEODEX(最適化されていない)になった後、すべての実行可能ファイルは変更可能です。

直接修正

パッチの作成
  既に述べたように、私の携帯電話は当初、Googleの使用を禁止していました。 まあ、少なくともバースト、Playstoreに行かないで、あなたのアカウントを構成しないで、電話帳は本当に同期していません。 なぜあなたはそのようなAndroidが必要ですか? デバイス自体のログ(logcat)を掘り下げると、Googleを使用することは禁止されているという記録が見つかりました。 Androidで最も不便なのは、ログを見るのですが、どのシステムアプリケーションがそれを生成しているのか分かりません。 足がどこで成長するかを知るためには、すべてのシステムアプリケーションを逆アセンブルしたJavaコードに置き換えなければなりませんでした。 これにはかなりの時間がかかりましたが、私はまだ完了した作業を分析し、必要なコードを検索します。 このツールを入手する手順は次のとおりです。
1 。 すべてのファームウェアを削除する
2 。 新しいDEODEXファームウェアを組み立てて携帯電話にフラッシュする必要があります。 これがどのように行われたかは別の記事の話題です。
3 。 / system / frameworkにある各ファイルから、classes.dexファイルを取り出し、dex2jarを使用してJARに変換します。
4 。 各JARをJD-GUIで開き、ソースコードに再保存します。
5 。 アーカイブからソースコードを解凍します。

その結果、/ system / frameworkにJARファイルが存在するフォルダをいくつでも取得でき、各フォルダにはJavaソースコードの構造がありました。
  簡単な操作で、私はすぐにlogcatエントリを生成した場所を見つけました。

私たちは禁止のすべての論理を考慮しません。それぞれの場合について別個の話です。 私はチェックが行われた場所私が見つけたの前に頭の中でアルゴリズムのブロック図を構築し、アルゴリズム少し「台無し」に登ることが必要であるかを理解するために、数時間を費やす必要がありました。

それはすべて簡単に判明しました。 電話機が中国に属しているかどうかに応じて、所定の定数に基づいて電話に応答するサブルーチンがあります。

コードがファイルにありました HTCExtension.jarこのサブルーチンを含むクラスが

元のファイルの解凍と解析
1 。 最初に必要なコードの一部を担当する元のDEODEX JARファイルを取得する必要があります。 私たちの場合 HTCExtension.jar.
2 。 任意のアーカイバで開き、そこからclasses.dexをプルします。
3 。 dex2jarコンバータを使用して、JARファイルに変換します。 チーム:dex2jar.bat classes.dex
4 。 受信したclasses_dex2jar.jarファイルをJD-GUIで表示します。
5 。 はい、ほとんどの場合、JD-GUIは元のコードと逆のコードを逆コンパイルしますが、理解できますが、読み込むことは可能です。 ソースコードでは、サブルーチンがプロジェクトパラメータとファームウェアの言語フラグをチェックすることがわかります。 残念ながら、戻り値はTRUEです。
  パブリック静的ブールisChina()(IF((HtcBuildFlag.Htc_PROJECT_flag == 216)||(HtcBuildFlag.Htc_PROJECT_flag == 218)||(HtcBuildFlag.Htc_PROJECT_flag == 23));(((HtcBuildFlag.Htc_PROJECT_flag == 1)、一方 &&(2 == HtcBuildFlag.Htc_LANGUAGE_flag))||(HtcBuildFlag.Htc_PROJECT_flag == 27))がtrueを返す; falseを返します;)
6 。 パッチを作成するには、Dalvikコード自体を逆アセンブルする必要があります。 このために我々はbaksmaliを使用する。 最も便利な方法は、別々のフォルダを作成し、そこに3つのファイルをまとめることです。 HTCExtension.jar, smali.jar   と baksmali.jar。 私たちは、コマンドjavaを与える-Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

これはあなたのAndroidバージョンのAPIです。 JBは16です
   - すべてのファームウェアフレームワークが置かれているフォルダ。

私の場合、それはチームだった。
  Javaの-Xmx512m -jar baksmali.jar -a 16 -d S:\\ DEV \\アンドロイド\\アンドロイド、キッチン\\ WORKING_JB_15 \\ SYSTEM \\枠組み-o HTCExtension -x HTCExtension.jar
7 。 新しく作成されたフォルダにはHTCExtensionというフォルダがあり、そこにはDalvikコードのファイルがあります。
8 。 途中でファイルを見つける \\ com \\ htc \\ util \\ contacts \\ BuildUtils $ Customization.java   コードを見てください:
S CONST / 16 V2、0xd8 IF-EQ V1:\u003e Htc_PROJECT_flag - ;パブリック静的isChina()Zの.registers 3 .prologue CONST / 4 V0、0x1の.LINE 276 SGET短V1、LCOM / HTC / htcjavaflag / HtcBuildFlagを.method 、V2 ,: cond_13 SGET短V1、LCOM / HTC / htcjavaflag / HtcBuildFlag; - \u003e Htc_PROJECT_flag:S CONST / 16 V2、0xda IF-EQ V1、V2 ,: cond_13 SGET短V1、LCOM / HTC / htcjavaflag / HtcBuildFlag ; - \u003e Htc_PROJECT_flag:SのCONST / 16 V2、0x17の場合、NE V1、V2 ,: cond_14 .LINE 297:cond_13:戻りgoto_13 V0 .LINE 283:cond_14のSGET短V1、LCOM / HTC / htcjavaflag / HtcBuildFlag; - \u003e Htc_PROJECT_flag:S IF-NE V1、V0 ,: cond_1d .LINE 285 CONST / 4 V1、0x2というのSGET短V2、LCOM / HTC / htcjavaflag / HtcBuildFlag; - \u003e Htc_LANGUAGE_flag:S IF-EQ V1、V2 ,: cond_13 .LINE 291:cond_1d SGET短いV1、LCOM / HTC / htcjavaflag / HtcBuildFlag; - \u003e Htc_PROJECT_flag:SのCONST / 16 V2、として0x1B IF-EQ V1、V2 ,: cond_13 .LINE 297 CONST / 4 V0、0x0の後藤:goto_13 .END 方法
9 。 恐ろしいですね。 何も明らかではない。 しかし、これは修正可能な問題です。 あなたのパッチのいくつかを作成し、あなたの手を埋めると、サードパーティのツールを使わずにコードを簡単に修正できます。 私たちの場合、このコードでは
  .prologue const / 4 v0、0x1は変数v0に1の値、つまりTRUEを割り当てます。 次に、すべての種類の小切手があり、電話が中国語でない場合は、変数の値が変更されます。
  .line 297 const / 4 v0、0x0 goto:goto_13
10 。 ロシアの民主主義の父親を救う最も簡単な方法は、コードを次のように変更することです:
  .prologue CONST / 4 V0、0x0の、すなわち)にかかわらず、常にFALSEを返すであろうとJD-GUIコードは、パブリック静的ブールisChina(どのようになるか、されていない1から0に、変数の値を変更すること、である(((IF Htcbuildflag.htc ||(HtcBuildFlag.Htc_PROJECT_flag == 27))falseを返す; falseを返す;)
11 。 はい、このメソッドは機能します。 しかし、私たちは簡単な方法を探しているわけではありません。 第二に、それほど美しくない。 私は何かのようなコードをしたい
  public static boolean isChina()(falseを返します)
12 。 そして、このソースコードのDalvikコードはどうやって入手できますか? 初心者の方にはちょっとしたトリックをします。

ダルビックコードを作成する
1 。 Android SDKを開きます。
2 。 新しいプロジェクトを作成し、唯一のテストクラスでは次のコードを記述します
  パッケージru.habrahabr.test; パブリッククラステスト(public static boolean isChina()(return false;))
3 。 私たちはプロジェクトをコンパイルし、組み立てられたアプリケーションをワークスペースから取り出します。
4 。 収集したアプリケーションを、JARファイルを取得したフォルダに置きます。
5 。 java -Xmx512m -jar baksmali.jar -a -d -o test -x test .apkコマンドを実行します。
6 。 新しく作成したアプリケーションをDalvikコードに分解しました。
7 。 test.smaliファイルを開き、そこのコードを見てください
  。静的静的isChina()Z。レジスタ1。プロジェクタ.line 7 const / 4 v0、0x0戻り値v0 .endメソッド
8 。 パッチのコードはすべて準備ができています。
パッチのローリング
1 。 Dalvikコードは、元のソースファイルのコード行を示すマーカーで囲まれています。 これは、プログラムにエラーがある場合は、それを表示する場合に必要です。 文字列がなければ、コードもうまくいきます。
2 。 行番号付き行の削除、コピーと置換の方法(サブルーチン) \\ com \\ htc \\ util \\ contacts \\ BuildUtils $ Customization.java   ファイル。
  。静的静的isChina()Z。レジスタ1。プロローグconst / 4 v0、0x0戻り値v0 .endメソッド
3 。 ファイルを保存します。 はい、私は言うことを忘れて、エディタは通常のもの、例えば、Notepad ++やEditPlusが必要です。 誰が何を好きですか?
パッチを適用したJARファイルのコンパイルと構築
1 。 バックスマイルの助けを借りて、私たちはJARファイルを掘り下げました。今はそれを元に戻す必要があります。
2 。 コマンドjava -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3 。 classes.dexファイルは私たちのパパに現れます
4 。 再び開く HTCExtension.jar   アーカイバにファイルを保存し、既存のアーカイブファイルを置き換えます classes.dex   新しく作成されました。
5 。 私たち全員 HTCExtension.jar   変更されたプログラムコードを含む。
元のファイルをパッチされたファイルに置き換える
  通常、通常のユーザーの場合、回復で置き換えられる特別なスクリプトが作成されます。 しかし、私たちは興味がありません。 まず、長くて退屈な、第二に、私たちは経験豊富なユーザーであり、若干の微妙な余裕があります。

1 。 すでにDEODEXファームウェアを持っていて、root権限を持っている場合は、現在の作業ファイルを次のコマンドに置き換えることができます。

Adb push HTCExtension.jar /sdcard/HTCExtension.jar adbシェルsuマウント-o再マウント-rw / system dd if = / system / framework / HTCExtension.jar of = / system / framework / HTCExtension.jar.back dd if = / sdcard /システム/フレームワーク/ HTCExtension.jarの/HTCExtension.jar chmod 644 /system/framework/HTCExtension.jar rm / data / dalvik-cache / [電子メールで保護された]@[電子メールで保護された]   リブート

第1チームはパッチを適用したファイルをUSBフラッシュドライブにアップロードします
  2番目のコマンドはシェルを開きます
  3番目のコマンドはルートアクセス権を与えます
  4番目のコマンドは、システムを読み取り/書き込みモードでマウントします
  チーム5がバックアップファイルを作成する
  6番目のコマンドは、既存のファイルを新しいパッチ適用済みファイルで上書きします。
  第7チームがパーミッションを設定する
8番目のコマンドはキャッシュを削除します
  チーム9はデバイスを再起動します。

2 。 この点をお読みいただきありがとうございます、それは少し残っています。
3 。 再起動後、新しいパッチコードが有効になります。
4 。 コードが機能しない、またはエラーがポップアップした場合、トリッキーな組み合わせでは、バックアップを元に戻すことができます。
  / system / framework / HTCExtension.jarの/ system / framework / HTCExtension.jar.back rm / data / dalvik-cache / adbシェルのマウント-o再マウント-rw / [電子メールで保護された]@[電子メールで保護された]   リブート

エピローグ

  はい、この記事は、誰かにあまりにも明確ではないように見えましたが、あまり明確ではない人には見えましたが、役に立たなかった人に見えました。 私は意図的に、それがどのように生き生きと現実に見えるかについての詳細な説明とイラストレーションをしなかった。 まず、この作品は恩知らずで、より多くの疑問を提起するだけです。 第二に、私は彼らが電話を殺したと不平を言うフォーラムでユーザーの軍隊を見たいとは思わない。

次の記事で私はtvikiを行う方法を教えます。 電話の本来の手段による電話の自動録音の使用例があります。 ご注意いただきありがとうございます。

P.S. 何かが明確でないか混乱している場合は、質問をしてください。私はいつも答えて説明することができます。

アンドロイド用のカスタムファームウェアを作成するのは簡単ではなく、特別なソフトウェアと特定のスキルと、この記事で説明するアクションのアルゴリズムが必要です。

特定のケースを考えて、順番に始めましょう。 カスタムファームウェアを作成するには、Androidに次のものが必要です。

  1. UbuntuオペレーティングシステムとJavaがインストールされているパーソナルまたはポータブルコンピュータ。
  2. "Kitchen" - システムパーティションのイメージを処理するためのアプリケーション。
  3. 実際には、処理されるAndroidファームウェア。

ステップ1 - Ubuntuをインストールする

UbuntuシステムはLinuxカーネルをベースにしており、Canonicalによって開発されたDebianをベースにしています。 現在のシステムの代わりにこのシステムをインストールしたり、エミュレータなどで実行したりする必要はありません。


快適にすべての利点を使用するには、WindowsでUbuntuをインストールできるWubiアプリケーションを使用すれば十分です。 Wubi - Windows Ubuntu Installerから短絡しています。

インストーラをダウンロードして新しいOSをインストールした後、コンピュータを起動すると、1つまたは別のシステムに入り、Windowsのコントロールパネルから選択して管理することができます。

ステップ2 - Javaをインストールする

Javaは1995年に開発されたプログラミング言語であり、その名前は映画(スターウォーズからのばかげたフォークJava)から取られているようです。

このテクノロジは、最新のさまざまな種類のソフトウェアに基づいています。 一部のサイトは、PC上のJavaでのみ動作します。


インストールするには、次のものが必要です。

  1. Ubuntuシステムにログインし、Ctrl + Alt + Tキーでターミナルを開きます。
  2. sudo add-apt-repositoryコマンド "deb http://archive.canonical.com/ubuntu lucid partner"を使用して、Javaをダウンロードできる新しいリポジトリを開きます。 これを行うには、Super-Admin権限を得るためにパスワードを入力する必要があります。これはUbuntuのインストール時に設定されます。 次に、次のコマンドを使用する必要があります。
  3. sudo apt-get updateを実行してソースリストを更新します。
  4. sudo apt-get install sun-java6-jre sun java6-plugin Javaをインストールするためのsun-java6-fonts。

ステップ3 - 「キッチン」を使ってファームウェアを作成する

プログラム "キッチン"は、アンドロイドのファームウェアを操作するための主要なツールです。 それらにはいくつかの種類があります。私たちはDsixdaの台所での作業を検討します。


  • 必要なファイルをダウンロードしたら、それらをキッチンディレクトリのホームフォルダに解凍する必要があります。
  • ターミナルを起動し、Isコマンドを使用してホームフォルダ内のドキュメントのリストを表示します。 ディレクトリは青で強調表示され、アーカイブファイルは赤で表示されます。
  • キッチンフォルダを開き、任意の形式の処理済みファームウェアファイルをoriginal_updateディレクトリに転送します。
  • 開いたフォルダのKitchenでターミナルに戻り、コマンドIsを入力します。 ファイルの中にメニューが表示されます。コマンド/ Menuで起動する必要があります。 これにより、行番号を入力してEnterキーを押すことで実行できる番号付きコマンドのリストが開きます。
  • ファームウェアを逆アセンブルするには、コマンド1を入力します。キッチンでは、Enterキーで応答する必要のある質問が多く表示されます(デフォルトでは、必要な値が入力されます)。

これらのアクションは、プログラムの最初のメニューにつながります。 キッチンのフォルダに戻ると、WORKING_x_yフォルダが見つかります。ここで、xとyは作成日時です。

それには、逆アセンブルされたファームウェアファイルが含まれます。 システムフォルダには、すべてのシステムファイルがあります。 これらのファイルの一部がファームウェアを変更します。

基本アプリケーション、機能、設定のセットを変更し、ファームウェアファイルのすべての修正を行うには、それを収集する必要があります。

これを行うには、ターミナルに戻り、コマンド99を入力して、発生したすべての質問にEnterキーを再度入力します。 その後、プログラムはユーザーを初期メニューに投げ込み、OUTPUT_ZIPフォルダーには新しいファームウェアファイルが格納され、モバイルデバイスにインストールされます。

カスタムカスタムファームウェアのアンドロイドを作成する他の方法があり、必要なプログラムはネットワーク上にあり、オペレーティングシステムのファイルを「開く」ことができ、特定のパラメータを自由に変更することができます。

これに対応するプログラムがいくつかあります:

  • Android SDKは、Android向けのアプリケーションを扱うために特別に作成された開発環境で、プログラムコードを確認することができます。
  • Android Kitchen - ファームウェア内のシステムパーティションのイメージを処理するために必要です。
  • JD-GUIは、Javaプログラミング言語で動作するデコンパイラです。 その対応はDJ Java Decompilerです。
  • smali - dalvikコードで作業する。 コードを逆アセンブルするように設計されたバックスマイルは、dalvikコードをアセンブルすることを可能にします。
  • dex2jarは、dalvik-codeでコンパイルされた実行可能ファイルを変換するためのユーティリティです。

どのAndroidユーザーにも、オペレーティングシステムの外観、実行する機能、デフォルトでインストールする必要のあるソフトウェアのアイデアがあります。 しかし、誰もが自分のファームウェアを作成することはそれほど難しいことではありません。 これを行うには、Linuxカーネルを理解したり、Androidソースをコンパイルしたり、スマートフォンの仕組みを理解したりする必要はありません。

はじめに

Androidコミュニケータ用に独自のファームウェアを作成するには、次の3つの方法があります。1. GoogleまたはCyanogenModチームによって公開されたソースからオペレーティングシステムを終了し、コンパイルします。 2.コミュニケータの在庫ファームウェアの変更。 3.第1または第2の方法を使用して作成された第三者ファームウェアの変更。

最初の方法は最も正確で柔軟性がありますが、Androidの機能とソースシステムを編集してデバイスで作業できるようにするための十分な知識が必要なことがよくあります。 このトピックは記事の範囲を超えているため、Androidソースの組み立てについては考慮しませんが、2つ目の方法、より正確には3つ目の方法について説明します。

サードパーティ製のファームウェア(いわゆるmods)は、ほとんどすべてのAndroid搭載端末に搭載されており、市場に投入されてから少なくとも1週間は経過しています。 通常、それらは既にコミュニケータ上のファームウェアの正しい動作に必要なすべての必要な変更を含んでおり、したがってシステム上の実験のための優れたプラットフォームを表しています。 これらは、認識を超えてほとんど変更することができ、OSにソフトウェアを含めることができ、その外観を変更し、シンプルなテキストエディタとファイルマネージャを使用して多くの低レベル設定を作成できます。 これらのアクションは、OSの深い知識を必要とせず、マガジンの読者が実行できます。

我々は実験的に選択する

したがって、私たちのコミュニケータがすでに設置されていてClockworkModリカバリコンソールがブート領域に記録されていて、何の制限もなくデバイスにファームウェアをインストールできるとします(10月号の記事 "Total subordination" )。 ここでは、デバイスに異なるファームウェアをインストールしたいと思いますが、私たち自身の変更、設定、ソフトウェアを使って、何も何もしません。 したがって、私たちには、他の誰かのファームウェアであるフレームワークが、私たちのデバイスで安定して動作する必要があります。 それをどこで入手できますか?

すべてのロモデルの主な生息地は、もちろん、xda-developers.comフォーラムです。 そこには、iOS、Windows Mobile、Windows Phone、Androidを実行するコミュニケーターのためのものがすべて見つかります。 ブラウザでサイトを開き、フォーラムセクションをクリックし、フォーラムリストでコミュニケータを探します。 次に、Android開発の該当するセクションに移動して、タイトルに「」という単語が含まれているトピックのリストを慎重に確認します。 「純粋なAndroid 2.3 Rom」やCyanogenModのポートのような名前のクリーンなファームウェアを見つける方が良いですが、実際には他の誰かが行います(作者の変更を取り消す必要があるかもしれませんが)。 私たちは最初の投稿をフラッシュし、リンクの最後にあなたのコンピュータにROMをダウンロードしてダウンロードしてください。

これで、ファームウェアファイルを開く必要があります。 これは、最も一般的なunzipを使用して行われます。

   $ mkdir〜/ rom; cd〜/ rom $ unzip ../path/up/proshivki.zip

一般的なディレクトリ構造と重要なファイル

前のコマンドを実行した結果のファイルとディレクトリのセットは、本質的にはAndroidオペレーティングシステムであり、デバイスのNANDメモリに配置されるのとまったく同じです。 Androidのバージョンと作成者の想像力によっては、ディレクトリとファイルのセットが異なる場合がありますが、META-INF、boot.imgファイル、およびシステムディレクトリの3つの必須オブジェクトが常に含まれています。

最初のディレクトリには、作成者の証明書ファイル、ファイルのリストとチェックサムを含むマニフェスト、NANDメモリに新しいファイルを作成したり、アクセス権を変更したり、ユーザーが見る進行状況バーを表示する更新スクリプトなど、ファームウェアに関するメタ情報が含まれています ファームウェアをインストールします。

boot.imgファイルには、Linuxカーネルとinitrdイメージを含むブートイメージが含まれています。 ほとんどのシステムパラメータは設定ファイルと/ procファイルシステムを使用して変更できるので、解凍することはできますが、私たちにとっては特別な利点はありません。 たとえば、BFSスケジューラを有効にしたり、NFSをサポートしたりして、特別なパラメータを使ってコンパイルしたカーネルが必要な場合は、同じxda-デベロッパー上で見つけることができ、ClockworkModでフラッシュできます。



最後に、システムディレクトリはすべてのことです。 このディレクトリの内容は、LinuxカーネルのないAndroidオペレーティングシステムです。 これには、OSが動作するために必要なものがすべて含まれているため、その構造を知るだけで十分です。 これは次のようになります。

  • アプリ   - プリインストールされたアプリケーション:電話、電卓、カレンダーなど
  • ビン   Linuxの/ binおよび/ usr / binディレクトリのアナログです。 上位システムコンポーネントで使用されるさまざまなシステムコンポーネントが含まれています。 たとえば、これはdalvikvm仮想マシンが配置されている場所です。
  •   - 設定ファイル。 しかし、Linuxの/ etcに完全に相当するものは、システムコンポーネントによってのみ使用されます。 Androidアプリケーションは、設定を/ data / dataディレクトリに保存します。
  • フォント   - フォント。 デフォルトではドロイドブランドのフォント(またはAndroid 4.0ではRoboto)のみが含まれています。
  • フレームワーク   - システムとAndroidソフトウェアによって使用されるJavaクラスのセット。 また、すべてのグラフィックファイルを含むオペレーティングシステムインターフェイスの完全な説明を含むframework-res.apkファイルもあります。
  • lib - 低レベルのシステムコンポーネントで使用されるLinuxライブラリ。 Linuxの/ libおよび/ usr / libディレクトリのアナログには、libc(ただしAndroidはGlibcの代わりに独自のBionicを使用)、libz(gzip-encryption)、libsslなどの標準ライブラリが含まれています。
  • メディア   - メディアファイル:着メロ、通知音、インターフェイスサウンド、OS起動アニメーションファイル。
  • tTS   - 音声合成装置の操作に必要なファイル。
  • usr   - オプションのディレクトリ。通常、binディレクトリのsoftinに必要なファイルが格納されています。 実際には、analogue / usr / shareです。
  • ベンダー   - デバイスの製造元が提供するファイル。 通常、Wi-Fiモジュールなどのさまざまな「鉄」コンポーネントのバイナリファームウェアが含まれています。
  • xbin   - ビンに含まれていないすべてのものを含むオプションのディレクトリ。 原則として、それは便利なユーティリティを格納するために使用されますが、システム操作(トップ、テキストエディタ)にはオプションです。 CyanogenModは、管理ツール(bash、ssh、powertop、busyboxなど)を保存するためにこれを使用します。
  • build.prop   - アセンブリに関する情報を含むファイルと、さまざまな低レベルの設定。

コマンドsetprop

アーティクルのbuild.prop設定は、setpropコマンドを使用して、すでに実行中のシステムに適用できます。

   #setprop debug.sf.nobootanimation 1

独自のソフトウェアスイート

ディレクトリ/ system / appには、ファームウェアにプリインストールされているすべてのソフトウェアが含まれています。 このディレクトリにパッケージを削除して追加することで、すぐに使用できるアプリケーションのセットを変更できます。 たとえば、標準的なAndroidのランチ(およびCyanogenModのADWLauncher)が減速し、多くの欠点を持つことは誰にも知られていません。 OK、それをLauncherProに置き換えてください:

   $ rm system / app / Launcher.apk $ wget goo.gl/U9c54 -o system / app / LauncherPro.apk

それがすべてです。 何もインストールする必要はありません。どこにでも突っ込む必要はなく、必要なアプリケーションをディレクトリにスローするだけです。 名前は問題ではありませんが、Android自体が目的のアプリケーションを見つけてホーム画面としてインストールします。 同じ方法で、他のプログラムをファームウェアに入れたり、そこから削除することができます。

ファームウェアに失われたスマートフォン(例えば、獲物)を見つけるためのアプリケーションの1つを入れておくと、工場出荷時の設定にリセットされても、OSに残っていて動作します。 また、標準のPhone.apkの代わりにDialer Oneを追加する、sms.apkの代わりにSMSを送信するなど、一部のシステムソフトウェアを置き換えることもできます。

sshサーバやmcのようなLinuxシステムのアプリケーションはどうですか? ここでも、すべてがシンプルです。 GoogleのNDKキットを使用してAndroidおよびARMプロセッサ用のソフトを構築することができますが、必要なアプリケーションの大半はすでに先だって編集されています。 たとえば、私たちのファームウェアにmcをプリインストールしたいとします。 xda-developersに行き、Midnight Commanderを検索してください。 最初のページでは、インストーラーでapk-packageを見つけて、同じunzipの助けを借りて解凍します。

   $ cd / tmp; 解凍〜/ NativnuxInstaller_1.1.apk

解凍されたファイルのアセット/キット/ mc-4.7.5.4-arm.tar.jetのリストにあります。 これはtar.gzアーカイブで、apk-packageをインストールした後(またはapkのインストール後、アプリケーションを起動してInstallボタンをクリックした後)、システムのルートに展開されます。 すぐに私たちのファームウェアに解凍し、あらかじめインストールされているmc:

   $ cd〜/ rom $ tar -xzf /tmp/assets/kits/mc-4.7.5.4-arm.tar.jet

デバイス上でファイルマネージャを起動するには、端末を開いてmcと入力してください。 その他のアプリケーションは、ClockworkMod Recoveryを使用してファームウェアのzipアーカイブに配布することができます。 あなたのmodに置くことはさらに簡単です;これを行うには、ファームウェアのルート(この場合は〜/ rom)に行き、unzipを使ってアーカイブを解凍します。



外観

Androidの外観を好きなように変更するには、自分のファームウェアを作成するのが最も一般的です。 Androidでこの操作を行うには、やはり非常に簡単です。 すべてのAndroid GUI設定はframework / framework-res.apkファイルに保存されています。 apktoolユーティリティを使用して解凍することができます。

   $ cd〜; wget goo.gl / hxz5l $ tar -xjf apktool1.4.1.tar.bz2 $ cd〜/ rom / system / framework $ java -jar〜/ apktool.jar d framework-res.apk

その結果、すべてのパッケージファイルを含むframework-resディレクトリがカレントディレクトリに表示されます。 その中で最も興味深いサブディレクトリはres / drawable- *とres / layout- *です。 最初のものは、解像度と画面の位置が異なるため、すべてのグラフィック要素がpngファイル形式で含まれています。 たとえば、drawable-land-mdpiは、水平位置にある中解像度の画面用のグラフィックリソースを持つディレクトリです(画面が回転すると、OSは他のファイルを使用するように切り替わります)。 もちろん、任意のファイルを編集または別のファイルに置き換えることができます。



レイアウトディレクトリには、XML形式のグラフィック要素の説明が含まれています(実際にはバイナリAXML形式で格納されますが、apktoolはそれらをプレーンXMLに変換します)。 説明の形式はかなりシンプルで簡単ですが、特にどこにあるのかわからない場合は、それを理解するのは難しいです。 したがって、すでにAndroidグラフィカルインターフェイスのためのさまざまな修正が登場しているxda-developersフォーラムの住人のサービスに再び回ります。 検索リクエスト "framework-res mod device_name"を使用して簡単に見つけることができます。

通常、このような改造は、既製のframework-res.apkファイルとして配布されます。このファイルは、ファームウェアに保存するだけです。 特定の相違点を見つけたい場合は、modを解凍してフレームワークと比較することができます-disはdiffを使用しています:

   $ diff -R〜/ framework-res \\〜/ rom / system / framework / framework-res

残念ながら、1つの記事の枠組みの中で、フレームワークの内部構造の少なくとも一部を考慮することはできません。詳細については、フォーラムw3bsit3-dns.comの関連トピックを参照してください。

変更を加えたら、同じapktoolを使ってframework-res.apkをビルドすることができます。 ただし、この操作には、apkt-fileの最終パッケージに使用するAndroid SDKのaaptユーティリティが必要です。 それは別々に得ることができます:

   $ cd〜/ bin; wget goo.gl/tC7k8

これでファイルを収集できます:

   $ cd〜/ rom / system / framework $ java -jar〜/ apktool.jar bフレームワーク-res $ cpフレームワーク-res / dist / framework-res.apk。 $ rm -rf framework-res

次のステップは、読み込みアニメーションを変更することです。 これは、system / media / bootanimation.zipアーカイブにパックされた通常のpngファイルとして保存されます。 それを開梱:

   $ cd / tmp $ mkdirブートアニメーション。 cd bootanimation $ unzip〜/ rom / system / media / bootanimation.zip

内部にはdesc.txtファイルがあり、これは以下の形式のアニメーションを記述します:

幅の高さFPS p注文の一時停止カタログ...

このファイルの標準的なビューは次のとおりです。

480 800 30 p 1 0 part0 p 0 0 part1

これは、画像が480×800のサイズを有し、画像変化率(FPS)が30個/秒であることを意味する。 次に、アニメーションの最初の部分の説明が続き、そのファイルはpart0ディレクトリにあります。 それは1回プレイされます(pの後の1番)。 次のパート(パート1)は、デバイスが起動するまで無限回数再生されます。 通常、part0ディレクトリにはアニメーションの最初の部分に対応するイメージが含まれ、part0にはループで再生される他のすべてのイメージが含まれます。 画像そのものは同じサイズで、名前に昇順で数字を含める必要があります(例:0001.png、0002.pngなど)。

ダウンロードアニメーションは非常にシンプルな形式なので、作るのはかなり簡単です。 mencoder(desc.txtではFPS 24の値を設定する必要があります)を使用してビデオをpngイメージに変換すれば十分です:

   $ mplayer -nosound -vo png:z = 9 video.avi

しかしそれは余分なものになるでしょう。 フォーラム参加者xda-開発者は、手で作業する必要がなくなるほど多くのアニメーションを行っています。 興味深いアニメーションへのリンクは記事の最後にあります。

低レベルの設定

この記事で最後に私が話したいのは、低レベルの設定を編集することです。 Androidには、このためのsystem / build.propファイルがあります。このファイルには、特定のデバイスのファームウェアビルドと設定に関する情報が格納されています。 このファイルに行を追加することで、Androidの機能を変更したり、仕事をスピードアップしたり、バッテリー消費を減らすことができます。 以下は最も興味深い設定です。



  1. メモリからデスクトップのアンロードを防止する:ro.HOME_APP_ADJ = 1

    このオプションを使用すると、いつでもデスクトップに即座にアクセスできるため、デバイスの操作をより便利にすることができます。 メモリが少ないデバイスにはお勧めできません。

  2. 保存されたJPGファイルの品質を改善する:ro.media.enc.jpeg.quality = 100

    カメラのショットをより鮮明にすることができますが、CPUの負荷が大幅に増加します。

  3. 起動アニメーションを無効にして、オペレーティングシステムの読み込み速度を上げます。debug.sf.nobootanimation = 1
  4. インターフェイスをGPUに描画する作業の一部を記述する:debug.sf.hw = 1

    インターフェイスをより迅速かつスムーズにすることができます。

  5. アクティブデバッグモードの通知をブロックする(USBを使用してコンピュータに接続している場合):persist.adb.notify = 0
  6. 通話終了後に黒い画面が表示されるという問題の排除:ro.lge.proximity.delay = 25 mot.proximity.delay = 25
  7. 画面をオンにした直後にバックライト制御キーをオンにする:ro.mot.buttonlight.timeout = 0

このすべてに加えて、多くのユーザーは次のフラグの組み合わせを使用することをおすすめします。

  1. タッチスクリーンの応答時間を短縮する:debug.performance.tuning = 1 video.accelerate.hw = 1 windowsmgr.max_events_per_sec = 150
  2. バッテリ寿命を延ばす:wifi.supplicant_scan_interval = 180 pm.sleep_mode = 1 ro.ril.disable.power.collapse = 0
  3. 3Gモジュールの調整:ro.ril.hsxpa = 2 ro.ril.gprsclass = 10 ro.ril.hep = 1 ro.ril.enable.dtm = 1 ro.ril.hsdpa.category = 10 ro.ril.enable。 a53 = 1 ro.ril.enable.3g.prefix = 1 ro.ril.htcmaskw1.bitmask = 4294967295 ro.ril.htcmaskw1 = 14449 ro.ril.hsupa.category = 5
  4. ネットワークパフォーマンスの向上:net.tcp.buffersize.default = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.wifi = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.umts = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.gprs = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.edge = 4096,87380,256960,4096,16384,256960

これらの行は、単にsystem / build.propファイルに格納して保存するだけです。

組立

OK、私たちは必要な変更を行い、アプリケーションを実装し、システムを微調整し、ファームウェアの準備が整ったOSイメージを作成する必要がありました。 これはユーティリティのtestsignに役立ちます。 まず、ファームウェアをzipでパックする必要があります。

   $ cd〜/ rom; zip -r my-rom.zip *

これで、アーカイブに署名して、Recoveryがインストールできるようにする必要があります。

   $ wget goo.gl/OyBBk $ java -classpath testsign.jar testsign \\ my-rom.zip my-rom-signed.zip

その後、アーカイブmy-rom-signed.zipをデバイスのメモリカードにアップロードし、デバイスの電源をオフにします。 リカバリを開始するには、ボリュームダウンキーを押したままデバイスをオンにします(デバイスによっては、手順が異なる場合があります)。

次に、「sdcardからzipをインストールする」の項目に進み、「sdcardからzipを選択」でSDカードのmy-rom-sign.zipを見つけて「はい」を選択します。 インストールが完了したら、「今すぐシステムを再起動する」を選択します。

結論

Androidは柔軟なプラットフォームです。この記事では、その変更の可能性についてはすべて説明していません。 より深い変更には、カーネルの置き換え、ロック画面と標準アプリケーションの変更、メモリカードへのアプリケーションの自動インストール、ブートスクリプトエンジン(/etc/init.d)の実装などの機能のアクティブ化などがあります。 次の記事ですべてのことを話します。

テーマを継続する:
アップル

正式なファームウェアにアップグレード/ロールバックする方法非公式のiPhone 5 / 4S / 4 / 3G / 3GSの場合、まずフラッシュするファームウェアが...