6

AOSP のいくつかのアプリケーション (ランチャー、SMS、ギャラリー、電子メール、カレンダー) を既に正常に変更しましたが、Phone,Contactsアプリケーションを変更する際に問題に直面しています。

Launcher,SMS,Gallery,Email,Calendarアプリケーションを変更するために、次の手順を実行しました。

  1. ICS AOSP をダウンロードし、個々のアプリケーションを Eclipse にインポートしました。
  2. パッケージ名を変更しましたcom.android.launcher2.iecom.test.launcher2
  3. その後Step 1Step 2フレームワーク クラスが欠落しているため、個々のアプリケーションでエラーに直面していました。欠落しているクラスをアプリケーションにインポートすることで解決しました。
  4. アプリケーションの UI を変更しました。
  5. emulator.でアプリケーションを実行しましたが、正常に動作しています。

今、連絡先、電話アプリケーションを内部で変更しているときに問題に直面していますStep 3:

java.*-> アプリケーションの、またはアプリケーション内に不足しているフレームワーク クラスをインポートするjavax.*と、コンソールに次のようなエラーが表示されます。Ill-advised or mistaken usage of a core class (java.* or javax.*) when not building a core library.

Android.mk-> 問題を解決するために、ファイルで指定され、ダウンロードした AOSP (ICS) のビルド中に生成されたいくつかの jar ライブラリを含めようとしましたが、問題は解決しませんでした。

-> com.android.phone.commonjarファイルで問題が解決する可能性があると思いますが、ビルドから取得したファイルにクラスが欠落していると思われるため、解決できません。数日以来、インターネットで見つけようとしていますが、できませんでした見つからないので、誰かがこの jar ファイルの完全な (動作する) バージョンを持っている場合は、それを共有してください

注:私の開発マシンには Windows 7 があり、私の短期的な目標は、連絡先、電話アプリケーションの UI を変更して実行することです。

編集:ビルドパスのスクリーンショット ここに画像の説明を入力 ここに画像の説明を入力

編集TimSort.java をデフォルトのパッケージに入れた後、

ここに画像の説明を入力

私はgithubデモでこのステップを説明しました。「TimSort.javaをインポートすると、Arrays.javaクラスの隠しメソッドにアクセスしようとするので、そのクラスをインポートする必要があります」.このエラーがJavaを作成した理由です. .util パッケージに Arrays.java クラスを含めます。それ以外の場合は、TimSort.java. だけをインポートしても問題ありません。スクリーンショットでは、comment次の 2 つのメソッドについて特別なことが書かれていることがわかります。

4

1 に答える 1

5

前回のコメントで述べたように、主な問題は、android.jar に既に存在する java.* と javax.* を含めることです。そのため、ビルダーは、あなたがコア ライブラリをビルドしていないのに、コア ライブラリをビルドしていると考えました。

プロジェクトの java.util.* パッケージを削除するだけです。そして、エラーはありません。android.jar には、java.xxx や javax.xxx などの多くのパッケージが既に含まれています。使用する必要のある Java コア ライブラリが本当に不足している場合は、リファクタリングを試してください。

Eclipse スナップショット

Android ソースを確認しました。dx は最初に次のように呼び出してソースの名前を確認します。

private static void checkClassName(String name) {
    boolean bogus = false;

    if (name.startsWith("java/")) {
        bogus = true;
    } else if (name.startsWith("javax/")) {
        int slashAt = name.indexOf('/', 6);
        if (slashAt == -1) {
            // Top-level javax classes are verboten.
            bogus = true;
        } else {
            String pkg = name.substring(6, slashAt);
            bogus = (Arrays.binarySearch(JAVAX_CORE, pkg) >= 0);
        }
    }

    if (! bogus) {
        return;
    }

    /*
     * The user is probably trying to include an entire desktop
     * core library in a misguided attempt to get their application
     * working. Try to help them understand what's happening.
     */

    DxConsole.err.println("\ntrouble processing \"" + name + "\":\n\n" +
            IN_RE_CORE_CLASSES);
    errors++;
    throw new StopProcessing();
}

IN_RE_CORE_CLASSES、コンソールに表示されるエラー文字列です。そのエラーが表示される理由を説明します。

アップデート:

TimSort.java を追加した後のスクリーンショット。

TimSort.java を追加した後のスクリーンショット

于 2013-04-26T06:19:55.463 に答える