Android:稀有和非

我有一个已发布的应用程序,它可以从用户那里获取有关ClassNotFoundException报告,这些报告超出了我的理想,试图修复。 我一直无法重现此崩溃,并且此类错误的类似实例在SO中有或者是不正确的路径到MainActivity的依赖项或不同的包,而不是清单。

与依赖关系错误路径的问题是Eclipse的问题,而所有其他错误可以通过Android Studio的“同步”和“干净项目”轻松解决(但我没有做到这一点)。

我已经三重检查了所有的软件包名称,没有发现任何差异。

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.johan.fsc">

    <uses-permission android:name = "android.permission.VIBRATE"/>
    <uses-permission android:name="com.android.vending.BILLING" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/logo"
        android:label="@string/app_name"
        android:fullBackupContent="true">
        <activity
            android:name="com.johan.fsc.MainActivity"
            android:screenOrientation="portrait"
            android:label="@string/app_name"
            android:theme="@style/splashscreenTheme"
            android:hardwareAccelerated="false"
            android:largeHeap="true">>
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name = "com.johan.fsc.SettingsActivity"
            android:theme="@style/PreferencesTheme"/>
    </application>

以下是我总是从用户处获得的错误报告:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.johan.fsc/com.johan.fsc.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.johan.fsc.MainActivity" on path: DexPathList[[zip file "/data/app/com.johan.fsc-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)
    at android.app.ActivityThread.access$800(ActivityThread.java:178)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5624)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.johan.fsc.MainActivity" on path: DexPathList[[zip file "/data/app/com.johan.fsc-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1071)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    ... 10 more
    Suppressed: java.io.IOException: Failed to open oat file from dex location '/data/app/com.johan.fsc-1/base.apk'
        at dalvik.system.DexFile.openDexFileNative(Native Method)
        at dalvik.system.DexFile.openDexFile(DexFile.java:295)
        at dalvik.system.DexFile.<init>(DexFile.java:80)
        at dalvik.system.DexFile.<init>(DexFile.java:59)
        at dalvik.system.DexPathList.loadDexFile(DexPathList.java:262)
        at dalvik.system.DexPathList.makeDexElements(DexPathList.java:231)
        at dalvik.system.DexPathList.<init>(DexPathList.java:109)
        at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)
        at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:65)
        at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:57)
        at android.app.LoadedApk.getClassLoader(LoadedApk.java:370)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:562)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4818)
        at android.app.ActivityThread.access$1500(ActivityThread.java:178)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1531)
        ... 7 more
Caused by: java.io.IOException: Failed to open oat file from /data/app/com.johan.fsc-1/arm/base.odex (error Failed to open oat filename for reading: No such file or directory) (no dalvik_cache availible) and relocation failed.
        ... 22 more
Caused by: java.io.IOException: 
        ... 22 more
Caused by: java.io.IOException: Failed to remove obsolete file from /data/dalvik-cache/arm/data@app@com.johan.fsc-1@base.apk@classes.dex when searching for dex file /data/app/com.johan.fsc-1/base.apk: Permission denied
        ... 22 more
    Suppressed: java.lang.ClassNotFoundException: com.johan.fsc.MainActivity
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available/output.

看起来罪魁祸首是java.io.IOException: Failed to remove obsolete file from /data/dalvik-cache/arm/data@app@com.johan.fsc-1@base.apk@classes.dex when searching for dex file /data/app/com.johan.fsc-1/base.apk: Permission denied ,但我没有找到为什么它被某些用户调用,而不是大多数,更重要的是 - 如何解决它。


可能的原因1:行android:largeHeap="true">>中的清单中存在拼写错误。 xml行以>>结尾。 这可能会阻止执行Intent-Filter。

可能的原因2:我的猜测是手机正在搜索类<PackageName>.<PackageName>.<ClassName>而不是<PackageName>.<ClassName> 。 所以肯定没有找到<PackageName>.<PackageName>.<ClassName>并且ClassNotFoundException将会是结果。 在android studio中,在清单中,默认情况下,活动名称的写法如下: android:name=".<ClassName>"而不是android:name="<PackageName>.<ClassName>" 。 你可以试试这个。

大多数手机可能正在检查是否在清单中的类名称之前添加了packagename。 如果添加它,则在搜索该类时不添加它。 尽管在搜索课程时默认情况下很少有手机必须添加软件包名称。 因此,他们找不到你的班级。


当然,你把你的活动命名为错误的。 一个活动不能在名称属性中包含该包的名称。

由于您已经在此处定义了包名称
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.johan.fsc">

你不应该在这里提到这个名字
<activity android:name="com.johan.fsc.MainActivity"

你应该使用包名和类名的唯一情况是当java类驻留在不同的包中时,就像import语句中所做的那样。
即使您的活动不在src文件夹中,而是出现在嵌套文件夹中,android studio也应该处理清单和活动本身的链接。 然而,包名不应该在那里使用。

链接地址: http://www.djcxy.com/p/32985.html

上一篇: Android: Rare and Non

下一篇: Getting issue while using .framework which have .a static library inside it