10

私の論文では、Androidフレームワークを変更し、ソース(4.1.1 Jelly Bean)を構築しています。フルビルドはできますが、これには非常に時間がかかるため(ubuntu 12.04 64ビット仮想マシンで開発しています)、個別のモジュールをビルドしたいと思います。

例:ロケーションモジュールに変更を加える場合、変更されたモジュールをビルドするだけで、新しいシステムイメージを作成できるはずです。

mmm frameworks/base
make snod

しかし、これは機能しません。起動しようとするたびに、次の理由で新しいシステムイメージが起動しません。

I/dalvikvm( 1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex'

いくつかの調査の後、私は環境変数を使用してdexpreoptを無効にしようとしました

export $WITH_DEXPREOPT=false 

export $DISABLE_DEXPREOPT=true 

'makeinstallclean'を使用して完全な再構築を実行します。完全な再構築が機能し、フレームワークへの変更がビルドに存在します。しかし、新しい変更を行った後でも、「mmmフレームワーク/ベース」と「makesnod」はdexpreoptの不一致をもたらします。

'makesnod'のbuild/core / makefileにも警告が表示されます:'警告:dexpreoptが有効になっていると、完全な再構築が必要になる場合があります。'これはmakefileの次の行から取得されます。

ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif

これにより、$ WITH_DEXPREOPT変数が正しく設定または読み取られていないと思いますか?これまでのところ、クリーンな完全再構築を行わずに起動可能なシステムイメージを取得することはできませんでした。dexpreoptを無効にするための正しい手順に従いますか、それともフレームワークに変更を加えて新しいシステムイメージを取得した後、個別のモジュールを構築する他の方法はありますか?

ビルドターゲットは「full-eng」です。

4

1 に答える 1

12

どうやら、WITH_DEXPREOPT環境変数は、の内部WITH_DEXPREOPT変数によって上書きされているようです。

build/target/board/generic/BoardConfig.mk

これをfalseに変更するか、Googleグループの人々によると、次のように作成を開始します。

make showcommands WITH_DEXPREOPT=false

トリックを行います。特定のモジュールをビルドして新しいシステムイメージを作成すると、起動可能なビルドになります。

(ソース:https ://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion )

于 2012-10-31T08:00:45.490 に答える