【问题标题】:Google Maps Android v2 not working with ActionBarSherlock Fragment ActivityGoogle Maps Android v2 无法与 ActionBarSherlock 片段活动一起使用
【发布时间】:2012-12-09 21:23:35
【问题描述】:

我已按照Using ActionBarSherlock With the New SupportMapFragment 上的步骤使用新的 Google Maps Android v2 API,但我遇到了一些错误,导致应用程序在启动时崩溃。

我在我的应用程序中使用 Maven,所以我也发布了我的 AndroidManifest 和 POM 文件。

你能帮帮我吗?

这是来自 logcat 的错误:

12-22 14:35:41.319: 错误/AndroidRuntime(8565): 致命异常: main java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable 在 com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(未知来源) 在 com.google.android.gms.maps.SupportMapFragment.onInflate(未知来源) 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:269) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:408) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:320) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:276) 在 com.actionbarsherlock.internal.ActionBarSherlockCompat.setContentView(ActionBarSherlockCompat.java:853) 在 com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:262) 在 br.com.myapp.activities.MainActivity.onCreate(MainActivity.java:19) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:130) 在 android.app.ActivityThread.main(ActivityThread.java:3687) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:507) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 在 dalvik.system.NativeStart.main(Native Method)

AndroidManifest:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="br.com.myapp" android:versionCode="1" android:versionName="2.0.0">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"></uses-sdk>
<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<permission android:name="br.com.myapp.permission.MAPS_RECEIVE"
            android:protectionLevel="signature" />
<uses-permission android:name="br.com.myapp.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />


<application android:label="@string/app_name" android:icon="@drawable/rp_icon"
             android:logo="@drawable/logo_actionbar" android:theme="@style/Theme.Sherlock.Light.DarkActionBar">

    <uses-library android:name="com.google.android.maps" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="MyKeyXXXXXXXXXXXXXXXXXXXXXXXXX" />

    <activity android:name=".activities.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>
    </manifest>

POM.xml:

    <?xml version="1.0" encoding="UTF-8"?>

http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 br.com.myapp myapp-android 2.0.0 APK 我的应用程序

<properties>
    <platform.version>4.2
        </platform.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>4.2</version>
    </dependency>
    <dependency>
        <groupId>com.loopj.android.http</groupId>
        <artifactId>async-http-client</artifactId>
        <version>1.4.2</version>
    </dependency>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>support-v4</artifactId>
        <version>r7</version>
    </dependency>
    <dependency>
        <groupId>com.actionbarsherlock</groupId>
        <artifactId>actionbarsherlock</artifactId>
        <version>4.2.0</version>
        <type>apklib</type>
    </dependency>
    <dependency>
        <groupId>com.google.android.gms</groupId>
        <artifactId>google-play-services</artifactId>
        <version>4</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                <resourceDirectory>${project.basedir}/res</resourceDirectory>
                <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                <sdk>
                    <platform>10</platform>
                </sdk>
                <undeployBeforeDeploy>true</undeployBeforeDeploy>
            </configuration>
            <extensions>true</extensions>
        </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

【问题讨论】:

    标签: android maven actionbarsherlock google-maps-android-api-2


    【解决方案1】:

    您是否包含了来自 Google 地图库的完整源代码?那里有资源(因此引用 java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source))。

    仅引用 google-play-services.jar 文件是不够的。仔细检查 Google Play 服务项目根目录下的 README.txt 文件。

    【讨论】:

    • 我已经在我的编译器上从 Android 4.2 平台切换到 Android Google 4.2 API,并将 com.google.android.maps 依赖项添加到我的 POM.xml,但仍然出现相同的错误。 README 文件显示“确保将此 Android 库项目导入 IDE 并将此项目设置为依赖项”,然后我假设我将无法使用 Maven 引用它。这是正确的吗?
    • 目前“库”类型的项目不能被引用为简单的.jar。所以尝试引用 Play 服务库项目。
    • +好地方。人们经常检查 src/ 并且没有来源,只有 jar。没有人检查 res/ - 他们只是复制 .jar 文件。 lib 需要 res/,因此您需要复制 res/ 或添加为库(更好的解决方案)
    • 但是如果我们将jar添加为maven dep,我们如何添加res呢?
    • 你 apklib 作为 maven 依赖,而不是 jar。
    【解决方案2】:

    在我的项目中发现了同样的问题。
    解决方案是为 com.google.android.gms 添加 2 个依赖项 apklibjar 到 maven 构建脚本:

        <!-- google-play-services. -->
        <dependency>
            <groupId>com.google.android.gms</groupId>
            <artifactId>google-play-services</artifactId>
            <version>4</version>
            <type>apklib</type>
        </dependency>
    
        <dependency>
            <groupId>com.google.android.gms</groupId>
            <artifactId>google-play-services</artifactId>
            <version>4</version>
            <type>jar</type>
        </dependency>
    

    此外,地图 v2 不需要依赖 com.google.android.maps

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 2014-06-06
      • 2012-11-28
      • 1970-01-01
      • 2013-05-10
      相关资源
      最近更新 更多