0

对此有几个现有问题,但似乎没有一个解决方案对我有用。

我想给我的应用贴上白标签。第一步是转到项目的属性并将项目标记为库项目。

然后,创建一个新的 Android 应用程序项目,打开属性,并将您的库项目添加到 Android 选项卡的库部分。

当我尝试编译时,出现错误:

Unable to execute dex: Multiple dex files define Lcom/facebook/android/R$drawable;

我的应用程序使用 Facebook 库(不是 jar 的形式)。随附的屏幕截图显示了我的工作区的样子。com_facebook_android 和另一个名为 wheel 的库不在我的顶级项目(库项目)的 libs 文件夹中,但它们作为库添加到属性中。我想我曾经试图将它们移到那里并遇到了一大堆问题。该应用程序在没有它们的情况下运行良好,所以我离开了它。我不确定这是否是问题所在。

有人能指出我正确的方向吗?尽管存在关于 stackoverflow 的问题,但我仍然无法弄清楚如何进行这项工作。

在此处输入图像描述

更新:

我几乎解决了这个问题。我开始以不同的方式将我的图书馆项目添加到 WhitelabelTest。

我最初去了 WhitelabelTest > Properties > Android > Library > 并将我的 Library Project 添加到列表中。我删除了这个。

相反,我进入了我的库项目的 bin 文件夹,复制了 jar 文件(我们称之为 LibraryProject.jar)并将其粘贴到 WhitelabelTest 的 /libs 文件夹中。然后我右键单击 LibraryProject.jar > 构建路径 > 添加到构建路径。

这使我能够编译 WhitelabelTest 项目并将其安装到我的模拟器上。

但是,当应用程序启动时,我收到以下崩溃:

 FATAL EXCEPTION: main
 java.lang.RuntimeException: Unable to instantiate application com.example.whitelabeltest.WhitelabelTest: java.lang.ClassNotFoundException: com.example.whitelabeltest.WhitelabelTest in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.example.whitelabeltest-1.apk]
    at android.app.LoadedApk.makeApplication(LoadedApk.java:466)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260)
    at android.app.ActivityThread.access$2200(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ClassNotFoundException: com.example.whitelabeltest.WhitelabelTest in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.example.whitelabeltest-1.apk]
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at android.app.Instrumentation.newApplication(Instrumentation.java:942)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:461)
    ... 11 more

也许这是因为我在 WhitelabelTest 中的 /src 文件夹完全是空的?我没有向 WhitelabelTest 添加新的源代码。我纯粹是在尝试将我的库项目导入到一个新的 Android 应用程序项目中,这样我就可以共享代码并只更新 /res 中的一些可绘制对象。

4

1 回答 1

0

这意味着您的全部 jar 集具有冗余类。归根结底,为 android 打包意味着将所有内容编译成最终产品。当您刚开始编写现成的组件时,可能会发生 jar A 和 B 还包含项目 C 中的类。您尝试过哪些“几个”事情?

您需要查看您的 lib 目录和相关项目。可能打开您认为可能是问题根源的 jar 文件。

您可以从另一个地方获取 jars,这样它们就不会发生冲突,从源代码获取它们并构建它们,或者编辑它们并删除重复的文件。在任何情况下,您都可能正在修改更改您的分发许可证的文件。

您最大的希望是,您的项目配置中以某种方式隐含地包含两次相同的 jar。

于 2014-01-23T22:26:57.923 回答