java.lang.noclassdeffounderror:com.google.android.gms.R $ styleable
我正在创build一个使用谷歌地图的Android应用程序。 这里是代码:
MapFragActivity.java
import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; public class MapFragActivity extends FragmentActivity { private GoogleMap map; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map_frag); map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) .getMap(); } }
AndroidManifest.xml中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.him.mapfrag_rnd" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="15" /> <permission android:name="com.him.mapfrag_rnd.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="com.him.mapfrag_rnd.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MapFragActivity" android:label="@string/title_activity_map_frag" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="my_api_key" /> </application> </manifest>
activity_map_frag.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
当我尝试这个代码时,我得到一个错误,这里是日志:
01-17 10:01:17.685: E/AndroidRuntime(8923): FATAL EXCEPTION: main 01-17 10:01:17.685: E/AndroidRuntime(8923): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable 01-17 10:01:17.685: E/AndroidRuntime(8923): at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source) 01-17 10:01:17.685: E/AndroidRuntime(8923): at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:279) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 01-17 10:01:17.685: E/AndroidRuntime(8923): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:272) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.Activity.setContentView(Activity.java:1835) 01-17 10:01:17.685: E/AndroidRuntime(8923): at com.him.mapfrag_rnd.MapFragActivity.onCreate(MapFragActivity.java:16) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.Activity.performCreate(Activity.java:4470) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.ActivityThread.access$600(ActivityThread.java:127) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.os.Handler.dispatchMessage(Handler.java:99) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.os.Looper.loop(Looper.java:137) 01-17 10:01:17.685: E/AndroidRuntime(8923): at android.app.ActivityThread.main(ActivityThread.java:4511) 01-17 10:01:17.685: E/AndroidRuntime(8923): at java.lang.reflect.Method.invokeNative(Native Method) 01-17 10:01:17.685: E/AndroidRuntime(8923): at java.lang.reflect.Method.invoke(Method.java:511) 01-17 10:01:17.685: E/AndroidRuntime(8923): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:986) 01-17 10:01:17.685: E/AndroidRuntime(8923): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753) 01-17 10:01:17.685: E/AndroidRuntime(8923): at dalvik.system.NativeStart.main(Native Method)
当我在MapFragActivity.java中进行一些更改时,会显示地图。 这里是变化:
package com.him.mapfrag_rnd; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.google.android.gms.maps.SupportMapFragment; public class MapFragActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_map_frag); SupportMapFragment fragment = new SupportMapFragment(); getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit(); } }
我所做的改变是对setContentView的评论。 我已经遵循了所有必要的步骤,但仍然遇到了错误。 如果取消注释setContentView()然后再次出现错误。
请帮忙!!!
您需要做的是在您的项目中添加一个Google Play服务库。 Google在这里有非常好的说明:
另外,我发现在尝试使Google地图v2正常工作的过程中,我发现它非常有用。
如果您使用Intellij Idea,
- 从项目面板中select您的项目
- 点击F4打开项目结构窗口
- 从左侧面板中select模块,然后点击+button,然后select“导入模块”,然后导航到“ ANDROID-SDK ”/ extras / google / google_play_services / libproject / google-play-services_lib。 通过这样做,这个项目将被添加到模块旁边与您的项目
- select你的项目,然后从右侧面板中select“依赖项”(这是一个选项卡)。 点击+button,然后点击“3 Module dependencies …”并select“google-play-services_lib”。
- 再次点击+button,然后点击“1 jars or directories …”,然后导航到上面path中的“/ libs”文件夹并select“google-play-services.jar”。
- 点击确定并closures项目结构窗口。
注意 :确保您没有在“库”(模块下的左侧面板)中添加“google-play-services_lib”项目作为库。 如果你有,你可以去“ 图书馆 ,只是删除它。 谷歌播放图书馆不应该出现在图书馆 。
注2 :如果您希望在版本控制或类似版本中使用,可以将整个google-play-services_lib目录复制到您自己的项目中。
我认为您必须将整个Google Play服务库导入到您的IDE中,而不仅仅是.jar
尝试一下 ;-)
我解决了这个问题,首先检查播放服务库添加正确,并在清单文件中的应用程序标签<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
我也有这个错误在Android工作室,我已经包括发挥服务阿尔法3与gradle alpha5,我做错了,我已经包括multidex。
在gradle
multiDexEnabled为true
和Application类的onCreate中
MultiDex.install(本);
但是我忘了用MultiDexApplication扩展Application类
因为MultiDexApplication没有被扩展,所以它不能包含gms和任何其他的dex类,所以它在gms String开始的时候会报错。
希望这有助于
检查你的google-play-services_lib项目的AndroidManifest.xml文件。 应该:
package="com.google.android.gms"
我有同样的错误。 我使用Android Studio和Gradle,因此没有太多东西需要configuration或改进。 我做了几乎所有的事情,但都没有为我工作。 最后一个作品:用较小的replace整个包装播放服务。 在我的情况下:
replace(在build.gradle文件中):
compile 'com.google.android.gms:play-services:8.4.0'
通过:
// Google Cloud Messaging compile 'com.google.android.gms:play-services-gcm:8.4.0' // Google Location compile 'com.google.android.gms:play-services-location:8.4.0'
-
使用Android SDK Manager下载“谷歌播放服务”
-
将其导入到您的工作区(path:android-sdk root / extras / google / google_play_service / libproject / google-play-service_lib)
-
项目属性 – > android – >库添加google-play-service_lib
-
构buildpath – >订单和导出检查Android私人图书馆
我通过在导入Google Play服务库时检查“ 将项目复制到工作区 ”来解决此错误。
更多信息在这里: http : //developer.android.com/google/play-services/setup.html
我遵循链接http://www.vogella.com/tutorials/AndroidGoogleMaps/article.html
并将google-play-services_lib库项目添加到我的应用程序中。 昨天工作很好。 但是,到了一天,我已经得到了上述例外。 这是因为没有谷歌播放库或我的项目无法访问库中的文件。 我重build了我的项目,但没有成功。 然后我重build了google-play-services_lib库项目,但没有希望。 然后我尝试在eclipse中“构build所有”选项,它工作正常。
如果您使用拆分Google Play服务(请参阅https://developers.google.com/android/guides/setup#split )
您必须将基础播放服务包含到您的Gradle文件中:
compile 'com.google.android.gms:play-services-base:7.5.0'
使用便签播放服务可以防止65k错误,并使您的应用程序更小
这两个谷歌播放服务添加到build.gradle它为我工作..编译'com.google.android.gms:播放服务的appindexing:8.1.0'编译'com.google.android.gms:播放服务:8.1.0'
- 如何显示Android棉花糖Google地图上的当前位置?
- 错误:MapFragment无法转换为android.support.v4.app.Fragment
- 用getMapAsyncreplacegetMap
- ScrollView内的Google Maps API v2 SupportMapFragment – 用户不能垂直滚动地图
- GooglePlayServicesUtil.getErrorDialog为null
- 如何在Android模拟器中下载Google Play服务?
- 将Google Play服务版本添加到应用的清单中?
- 如何在Google Maps for Android API v2上显示我的位置
- Google Maps Android API v2 – 示例代码崩溃