2011-11-28 51 views
2

我正在尝试在eclipse上构建ICS联系人代码。由于联系人使用了一些隐藏的类,我创建了一个包含所有必需类的新jar文件,并成功构建了apk。Android的ICS版本在eclipse上构建联系人代码

但现在问题是我添加在jar中的任何类都丢失了最终的apk包中的链接,我得到noClassDefFoundError异常。

我反编译了apk,发现这个类是在apk中出现的。为什么链接丢失,事件中没有类文件存在于apk中?

我尝试使用jar文件作为外部库,但由于其大小(> 20mb)未成功。

回答

2

联系人应用程序正在使用几种类型的隐藏文件。其中一些是隐藏框架项目,如AggregationSuggestions.PARAMETER_MATCH_NAME,其他属于静态库,如com.android.phone.CallLogAsync。第一种文件不应该嵌入到APK中,但第二种文件应该是。

如果你看看Android.mk为联系人,你可以找出需要什么样的静态库:

LOCAL_STATIC_JAVA_LIBRARIES := \ 
com.android.phone.common \ 
com.android.vcard \ 
android-common \ 
guava \ 
android-support-v13 \ 
android-support-v4 \ 
android-ex-variablespeed \ 

编译在Eclipse联系您应该添加框架类“用户库”,所有静态库作为“外部JAR”。

获取所有需要的jar的最简单方法是构建Android源代码并查看out/target/common/obj/JAVA_LIBRARIES。每个库都有自己的目录名为libname _intermediates其中包含classes-full-debug.jar。这些罐子正是你建立联系人所需要的。框架类驻留在framework_intermediates中,但是您可能需要添加更多的jar。

您应该在Eclipse中为您的项目调整“订购&导出”,以确保您的具有框架类的“用户库”高于“Android 4.0”。

+0

我可以在互联网上的任何地方下载这些库并将其放入我的应用程序中吗? –

+1

@Darth Beleg从哪里可以下载这些jar文件? –