地理围栏(Android 示例应用程序)java.lang.ClassNotFoundException MainActivity

Posted

技术标签:

【中文标题】地理围栏(Android 示例应用程序)java.lang.ClassNotFoundException MainActivity【英文标题】:Geofences (Android sample app) java.lang.ClassNotFoundException MainActivity 【发布时间】:2014-07-25 00:55:52 【问题描述】:

我有一个 ASUS Eee Tab(Transformer Prime TF201 android v4.1.1)。我正在阅读有关地理围栏的 API,并将下面的示例应用程序下载到我的设备上 => http://developer.android.com/training/location/geofencing.html。但是当我打开它时它会终止。

我已经在AndroidManifest.xml文件中设置了target sdk = 16

LogCat

06-04 19:39:34.176: E/AndroidRuntime(2596): FATAL EXCEPTION: main
06-04 19:39:34.176: E/AndroidRuntime(2596): java.lang.RuntimeException: Unable to instantiate activity ComponentInfocom.example.android.geofence/com.example.android.geofence.MainActivity: java.lang.ClassNotFoundException: com.example.android.geofence.MainActivity
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.os.Looper.loop(Looper.java:137)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.app.ActivityThread.main(ActivityThread.java:4745)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at java.lang.reflect.Method.invokeNative(Native Method)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at java.lang.reflect.Method.invoke(Method.java:511)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at dalvik.system.NativeStart.main(Native Method)
06-04 19:39:34.176: E/AndroidRuntime(2596): Caused by: java.lang.ClassNotFoundException: com.example.android.geofence.MainActivity
06-04 19:39:34.176: E/AndroidRuntime(2596):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
06-04 19:39:34.176: E/AndroidRuntime(2596):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
06-04 19:39:34.176: E/AndroidRuntime(2596):     ... 11 more

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
     Copyright (C) 2013 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.geofence"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <!--
        Requests address-level location access, which is usually
        necessary for geofencing
    -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:allowBackup="true" >

        <!-- The app's entry point -->
        <activity
            android:name="com.example.android.geofence.MainActivity"
            android:label="@string/title_activity_geofence" >
            <intent-filter>
                <!--
                    This activity is triggered when the system
                    tries to start the app's main activity
                -->
                <action android:name="android.intent.action.MAIN" />

                <!--
                    This activity should be linked to the app's Launcher icon
                 -->
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name="com.example.android.geofence.ReceiveTransitionsIntentService" android:exported="false"></service>
    </application>

</manifest>

【问题讨论】:

发布您的 Logcat,或提供更多信息。 ClassNotFoundException: com.example.android.geofence.MainActivity 看看你的包和类中是否有正确的名称。也在清单中。 你的项目配置文件是什么?可能是您没有设置正确的类以使用 APK 导出。 我的怀疑是和这个问题类似:***.com/questions/10866431/… 【参考方案1】:

@stud91 我已经从上面的 Url 下载了示例项目,并且我已经更改了一些基本的东西

    创建“libs”文件夹 放入 android-support-v4.jar 和 google-play-services.jar jar 文件

然后运行示例项目它就像一个魅力。 您可以从“adt-bundle-windows-x86\sdk\extras\google\google_play_services\libproject\google-play-services_lib\libs”中找到 google-play-services_lib 我想你已经使用了 Goolge 包来删除这个包。删除您为此项目创建的所有参考。清理您的示例项目并享受。 my sample project's structure 和 out put

【讨论】:

【参考方案2】:

根据官方 Android 团队 Creating and Monitoring Geofences 的说法,您应该 Set Up Google Play Services SDK 在带有 AVD 的 Android 模拟器上运行,该 AVD 运行基于 Android 4.2.2 或更高版本的 Google API 平台。

在地理围栏试验链接中说:

Note: To make your app compatible with platform version 1.6 and later, the activity that displays the DialogFragment must subclass FragmentActivity instead of Activity. Using FragmentActivity also allows you to call getSupportFragmentManager() to display the DialogFragment. 

【讨论】:

【参考方案3】:

我在启动一个扩展MapActivityActivity 时遇到了同样的问题。花了一些时间和研究来找到答案。在 application 标签下的 manifest.xml 中添加 uses-library 为我解决了这个问题:

<uses-library android:name="com.google.android.maps" />

【讨论】:

以上是关于地理围栏(Android 示例应用程序)java.lang.ClassNotFoundException MainActivity的主要内容,如果未能解决你的问题,请参考以下文章

在后台广播的工作地理围栏示例

新的 Android 地理围栏 API - 示例代码在位置时不会发出警报/通知

带有模拟位置提供程序的 Android 地理围栏

Android 地理围栏示例应用程序仅在使用 GPS 打开另一个应用程序时才有效

在哪里可以找到适用于 Android Studio 3.3 的未弃用地理围栏示例代码?

如何使用 Android 地理围栏 API?