我在项目中使用Google地图,并使用 Android.mk 进行构建。但仍然(经过几天的研究)无法弄清楚如何解决 NoClassDefFoundError ,这会及时崩溃apk版Google Maps片段通胀。我内心可以解决一个必须解决的问题吗? Detalization在下面。
Google Play服务库按以下方式添加:
#Adding classpath to Google Play Services classes
LOCAL_CLASSPATH += $(LOCAL_PATH)/google-play-services_lib/bin/
...
#Google Play Services
LOCAL_STATIC_JAVA_LIBRARIES += google-play-services \
google-play-services_lib
...
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += google-play-services:libs/google-play-services.jar \
google-play-services_lib:libs/google-play-services_lib.jar
构建很顺利但是当尝试使用Google Maps片段来扩充布局时,应用程序会抛出运行时错误。 LogCat :
**java.lang.NoClassDefFoundError**:
java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
at android.app.Activity.onCreateView(Activity.java:4996)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
at com.mapsvisitor.ui.MapsFragment.onCreateView(MapsFragment.java:81)
...
代码:
final View layout = inflater.inflate(R.layout.maps_layout, null);
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
</LinearLayout>
答案 0 :(得分:1)
问题在于,当您将依赖项目用作库时,生成的JAR(google-play-services_lib.jar)不适合独立使用(作为java静态库)。解决方案简单地使用Eclipse导出生成的JAR,而不是以下列方式导出&gt; Java&gt;带有选定 src 和 gen 文件夹的JAR文件:
以下代码段有助于定义 com.google.android.gms.R 和嵌套类不可用(com.google.android.gms.R $ attr,com.google.android。 gms.R $颜色等):
void isClassesAvailable(List<String> classes) {
for(String cl: classes) {
try {
Class.forName(cl);
}
catch (ClassNotFoundException e) {
Log.w(TAG, e.getMessage());
}
}
}
如何为依赖项目打包JAR(使用src文件夹类。请参阅文件夹&#34; android&#34;下面):
如何为强大的静态库打包JAR(使用src和gen文件夹类。请参阅文件夹&#34; android&#34;以及&#34; com&#34;下面):
然而,在使用Eclipse导出轻量级黑客的惯用右解决方案成为GTD之前。使用google-play-services_lib / bin / classes 内容简单重新打包google-play-services_lib.jar,之前提供的内容使所有资源类都可用。