我正在尝试在eclipse上构建ICS联系人代码。由于联系人正在使用一些隐藏的类,我创建了一个包含所有必需类的新jar文件,并成功构建了apk。
但现在问题是我在jar中添加的类中缺少最终apk包中的链接而且我得到noClassDefFoundError异常。
我反编译了apk,发现该类存在于apk中。为什么链接丢失,因为apk中存在类文件?
我尝试将jar文件用作外部库,但由于其大小(> 20mb)未成功。
答案 0 :(得分: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中编译Contact,您应该将框架类添加为“User library”,将所有静态库添加为“External JAR”。
获取所有需要的jar的最简单方法是构建Android源并查看/ target / common / obj / JAVA_LIBRARIES。每个库都有自己的目录,名为 libname _intermediates,其中包含classes-full-debug.jar。这些罐子正是您构建联系人所需要的。框架类驻留在framework_intermediates中,但是您可能需要添加更多的jar。
您应该在Eclipse中为您的项目调整“Order& Export”,以确保带有框架类的“用户库”高于“Android 4.0”。