无法执行dex:多个dex文件定义Lcom / facebook / android / R $ drawable;

时间:2014-01-23 22:07:26

标签: android white-labelling

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

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

然后,创建一个新的Android应用项目,打开属性,并将您的图书馆项目添加到Android标签的图书馆部分。

当我尝试编译时,我收到错误:

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

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

有人能指出我正确的方向吗?尽管存在有关stackoverflow的问题,但我还是无法弄清楚如何使其工作。

enter image description here

更新:

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

我原本去过WhitelabelTest>属性> Android>图书馆>并将我的图书馆计划添加到列表中。我删除了这个。

相反,我进入了我的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中的my / src文件夹是完全空的?我没有向WhitelabelTest添加任何新的源代码。我纯粹是试图将我的图书馆计划导入一个新的Android应用程序项目,这样我就可以共享代码并只更新/ res中的一些drawable。

1 个答案:

答案 0 :(得分:0)

这意味着您的整套罐子都有多余的类。最终,Android的包装意味着将所有内容编译成最终产品。当你刚刚开始编写现成的组件时,可能会发生罐A和B也包含来自项目C的类。你尝试了几个“几个”的东西?

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

您可以从其他地方获取罐子,使它们不冲突,从源头获取它们并构建它们或编辑它们并删除重复文件。在任何情况下,您可能正在修改更改分发许可证的文件。

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