6

我已经成功修改了 AOSP 的几个应用程序(启动器、短信、画廊、电子邮件、日历),但我在修改Phone,Contacts应用程序时遇到了问题。

我已经通过以下步骤来修改Launcher,SMS,Gallery,Email,Calendar应用程序:

  1. 我已经下载了 ICS AOSP 并在 eclipse 中导入了单个应用程序。
  2. 我已将包名.ie 更改com.android.launcher2com.test.launcher2
  3. 之后Step 1Step 2由于缺少框架类,我在单个应用程序中遇到错误。我通过在我的应用程序中导入那些缺少的类来解决它们。
  4. 我已经修改了我的应用程序的 UI。
  5. 我已经在模拟器上运行了应用程序。它工作正常。

现在,我在修改联系人、电话应用程序时遇到了问题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 并运行它。

编辑: Buildpath 的截图 在此处输入图像描述 在此处输入图像描述

编辑将 TimSort.java 放入默认包后,

在此处输入图像描述

我已经在 github 演示中描述了这一步,还说“当我导入 TimSort.java 时,它会尝试访问 Arrays.java 类的一些隐藏方法,所以我需要导入那个类”。这个错误是我创建 java 的原因.util 包以包含 Arrays.java 类。否则我很高兴只导入 TimSort.java.by 顺便comment说一下,在屏幕截图中我们可以看到它特别说明了接下来的 2 种方法

4

1 回答 1

5

正如我在上一条评论中所说,主要问题是您包含了 java.* 和 javax.*,它们已经存在于 android.jar 中。因此,构建者认为您正在构建核心库,而您却没有。

我只是删除了您项目中的 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 回答