2014-01-23 56 views
0

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

我想白色标签我的应用程序。第一步是转到项目的属性并将项目标记为图书馆项目。

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

当我尝试编译,我得到的错误:

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

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

难道有人指着我正确的方向吗?尽管在stackoverflow上存在问题,但我一直无法弄清楚如何完成这项工作。

enter image description here

UPDATE:

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

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

取而代之,我进入了我的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中的一些drawable。

回答

0

这意味着你的全套罐子有冗余类。最终,android的包装意味着将所有东西编译成最终产品。当你刚刚开始编写现成的组件时,可能发生A和B的jar也包含来自项目C的类。你尝试过哪些“几件”事情?

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

您可以从另一个地方拿到罐子,使它们不发生冲突,从源头获取它们并构建它们或编辑它们并删除重复的文件。无论如何,您可能正在修改更改您的分发许可证的文件。

你最好的希望就是你只需要在你的项目配置中隐式地包含两次相同的jar。

+0

如果我grep的'grep -ir“Lcom/facebook/android/R $ drawable;” 。/',我得到2个结果:'二进制文件./facebook-android-sdk/facebook/bin/classes/com/facebook/android/R.class matches'和'二进制文件./WhitelabelTest/bin/classes/ com/facebook/android/R.class匹配“ – Andrew

+0

此搜索可能不包括压缩的罐子。你有一个bin/dir与facebook android sdk?你是否还将它作为一个jar包含在内,还是完全从源代码构建它? –

+0

库项目或WhitelabelTest的bin目录都不包含任何对Facebook sdk的明显引用。唯一的可能是我的库项目的bin中的jar文件(我们将其称为LibraryProject.jar)。由于Facebook SDK是该项目的图书馆,可能它在那里。我没有将Facebook sdk作为WhitelabelTest的库。另外,请参阅我对原始帖子的更新。我以不同的方式将图书馆项目纳入WhitelabelTest,并取得了不同的结果(但并非工作)。 – Andrew

相关问题