简体   繁体   English

如何解决com.google.android.gms.R $ styleable错误的java.lang.NoClassDefFoundError?

[英]How to solve java.lang.NoClassDefFoundError for com.google.android.gms.R$styleable error?

I use Google Maps in a project and build it with Android.mk . 我在一个项目中使用Google Maps,并使用Android.mk进行构建。 But still (after days of research) cann't figure out how to solve NoClassDefFoundError which crashes the apk in time Google Maps fragment inflation is happen. 但是,仍然(经过几天的研究)仍无法弄清楚如何解决NoClassDefFoundError ,该错误会在Google Maps片段膨胀发生时使apk崩溃。 Can any inside me about a way it have to be solved? 我内部有什么办法可以解决吗? Detalization is below. 详细信息如下。

Google Play Services library is added in the following way: 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

Build goes fine but application throws runtime error when tries to inflate layout with Google Maps fragment. 构建可以正常进行,但是当尝试使用Google Maps片段填充布局时,应用程序会引发运行时错误。 LogCat : 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)
    ...

Code : 代码

final View layout = inflater.inflate(R.layout.maps_layout, null);

Layout : 版面

<?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>

The problem is in that when you use dependency project as a library the generated JAR (google-play-services_lib.jar) is not suitable for independent use (as java static libraries). 问题在于,当您将依赖项目用作库时,生成的JAR(google-play-services_lib.jar)不适合独立使用(如java静态库)。 As solution simple use JAR generated by Eclipse export instead in the following way Export > Java > JAR file with selected src and gen folders to export: 作为解决方案,请简单地使用Eclipse导出生成的JAR,而不要采用以下方式导出:带有选择的srcgen文件夹的Export> Java> JAR文件进行导出: 在此处输入图片说明

The following snippet helps to define that com.google.android.gms.R and nested classes are unavailable (com.google.android.gms.R$attr, com.google.android.gms.R$color, etc): 以下代码段有助于定义com.google.android.gms.R和嵌套类不可用(com.google.android.gms.R $ attr,com.google.android.gms.R $ color等):

void isClassesAvailable(List<String> classes) {
    for(String cl: classes) {
        try {
            Class.forName(cl);
        }
            catch (ClassNotFoundException e) {
            Log.w(TAG, e.getMessage());
        }
    }
}

How JAR is packed for dependency project (with src folder classes. See folder "android" below): 如何为依赖项项目打包JAR(带有src文件夹类。请参见下面的文件夹“ android”): 在此处输入图片说明

How JAR has to be packed for robust static library (with src and gen folder classes. See folders "android" and "com" below): 如何为健壮的静态库打包JAR(带有src和gen文件夹类。请参见下面的文件夹“ android”和“ com”): 在此处输入图片说明

However before idiomatically right solution which uses Eclipse export light hack becomes the GTD. 但是,在使用Eclipse导出轻技巧的习惯上正确的解决方案之前,它已经成为GTD。 Simple repacking google-play-services_lib.jar with google-play-services_lib/bin/classes content and previously presented there ones makes all resource's classes available. 使用google-play-services_lib / bin / classes内容简单地重新打包google-play-services_lib.jar并先前在其中显示内容,可以使用所有资源的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 运行时错误:java.lang.NoClassDefFoundError:com.google.android.gms.R $ styleable - Run Time Error : java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable Android Google Maps v2:java.lang.NoClassDefFoundError:com.google.android.gms.R $ styleable - Android Google Maps v2: java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable Maps Android V2:java.lang.noclassdeffounderror:com.google.android.gms.R $ styleable - Maps Android V2: java.lang.noclassdeffounderror: com.google.android.gms.R$styleable E / AndroidRuntime(622):java.lang.NoClassDefFoundError:com.google.android.gms.R $ styleable - E/AndroidRuntime(622): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable android:java.lang.NoClassDefFoundError:com.google.android.gms.R $ styleable - android : java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable java.lang.NoClassDefFoundError:com.google.android.gms.R $在Android中可设置样式 - java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable in android java.lang.NoClassDefFoundError:com.google.android.gms.R $ styleable(已添加项目!) - java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable (PROJECT ADDED!!) java.lang.noclassdeffounderror:com.google.android.gms.R $ styleable没什么帮助我的 - java.lang.noclassdeffounderror: com.google.android.gms.R$styleable nothing helped me java.lang.NoClassDefFoundError:com.google.android.gms.R $仅当布局文件中存在地图片段时才可设置样式 - java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable only when a maps fragment is present in the layout file Android错误:java.lang.NoClassDefFoundError:com.google.android.gms.R $ string - Android error: java.lang.NoClassDefFoundError: com.google.android.gms.R$string
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM