我正在尝试在 Eclipse 上构建 ICS 联系人代码。由于联系人使用了一些隐藏类,我创建了一个包含所有必需类的新 jar 文件,并成功构建了 apk。
但现在的问题是我在 jar 中添加的类在最终的 apk 包中缺少链接,我得到了 noClassDefFoundError 异常。
我反编译了 apk,发现 class 存在于 apk 中。为什么 apk 中存在类文件但链接丢失?
我尝试将 jar 文件用作外部库,但由于其大小 (>20mb) 没有成功。
最佳答案
通讯录应用程序使用了多种类型的隐藏文件。其中一些是隐藏的框架项目,如 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,您应该将框架类添加为“用户库”并将所有静态库添加为“外部 JAR”。
获取所有需要的 jar 的最简单方法是构建 Android 源代码并查看 out/target/common/obj/JAVA_LIBRARIES。每个库都有自己的名为 libname_intermediates 的目录,其中包含 classes-full-debug.jar。这些 jar 正是您构建联系人所需的。框架类位于 framework_intermediates 中,但是您可能需要添加更多的 jar。
您应该在 Eclipse 中为您的项目调整“订购和导出”,以确保您的带有框架类的“用户库”高于“Android 4.0”。
关于Android ICS 版本在 eclipse 上构建联系人代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291469/