2016-03-31 9 views
7

ClassNotFoundExceptionについてのレポートを入手した公開アプリがあります。私はこのクラッシュを再現することができませんでした。このエラーの類似したインスタンスは、マニフェストよりMainActivityの依存関係または別のパッケージへの不正なパスのケースでした。Android:希少で再現不可能なClassNotFoundException

依存関係への間違いの問題はEclipseのものですが、他のすべてのエラーはAndroid Studioの「同期」と「クリーンプロジェクト」(これは役に立たなかった)で簡単に修正できます。

すべてのパッケージ名を3回確認したところ、矛盾が見つかりませんでした。ここで

は私のマニフェストです:犯人がjava.io.IOException: Failed to remove obsolete file from /data/dalvik-cache/arm/[email protected]@[email protected]@classes.dex when searching for dex file /data/app/com.johan.fsc-1/base.apk: Permission deniedであるように思わ

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/[email protected]@[email protected]@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. 

が、私は持っている:ここでは

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

は、私は常に、ユーザーから取得したエラーレポートですそれが何人かのユーザーのために呼び出されているが、大多数ではなく、より重要なのは、それを修正する方法が見つからないということです。

+1

これは、[インストールが失敗しました](http:// stackoverflow。'古くなったファイルを削除できませんでした...許可が拒否されました.'という行に基づいて、問題が発生しました。com/questions/36314269/android-app-users-get-installation-unsuccess-after-introduction-billing-perm)問題 –

+0

接続があるかもしれないと考えていたが、インストーラが実際にマニフェストで定義された権限を使用しているとは思わなかった。 –

+0

再インストールする前に、デバイスからアプリをアンインストールしてみましたか? –

答えて

3

考えられる原因1:android:largeHeap="true">>のマニフェストにタイプミスがあります。 xml行は>>で終わります。これにより、Intent-Filterの実行が妨げられている可能性があります。

考えられる原因2:携帯電話が<PackageName>.<ClassName>の代わりに<PackageName>.<PackageName>.<ClassName>クラスを検索していると思われます。だから間違いなく<PackageName>.<PackageName>.<ClassName>が見つからず、ClassNotFoundExceptionが結果になります。アンドロイドスタジオでは、マニフェストでは、デフォルトではアクティビティ名はandroid:name="<PackageName>.<ClassName>"の代わりにandroid:name=".<ClassName>"のように書かれています。これを試すことができます。

マニフェストのクラス名の前にpackagenameが追加されているかどうかを確認する電話機がほとんどです。追加された場合、クラスの検索中に追加されません。いくつかの電話は、クラスを検索する際にデフォルトでパッケージ名を追加する必要があります。したがって、彼らはあなたのクラスを見つけることができません。

+0

私は、これよりむしろあなたが言及している眩しい、エラーのないタイプミスにはもっと問題があると思います。これは、もう一つのClassNotFoundExceptionを避けるために私が採用した解決策でした。 –

+0

私が試したとき、そのタイプミスは私にエラーを与えませんでした。グレートは私に賞金を授与してください – suku

+0

私はあなたが私の他の質問であなたの答えを使用する必要があると思うhttp://stackoverflow.com/questions/36314269/android-app-users-get-installation-unsuccessful-after-introducing-billing- perm?lq = 1、あなたの答えはそれを修正するものかもしれませんが、それでもClassNotFoundExceptionの確かな説明ではありません。そこにあなたの答えを掲示すれば、テスターがそれが再びインストールされることを確認したら恩恵を受け取ります。それがこのエラーの原因になった場合は、両方の賞金を得るでしょう。 –

0

確かに、あなたの活動に間違った名前を付けています。アクティビティCAN NOTは、そのname属性にパッケージの名前で構成されています。

あなたはすでにここ
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.johan.fsc">

をパッケージ名を定義しているので、あなたはここでその名前
<activity android:name="com.johan.fsc.MainActivity"

あなたはクラスの名前があると一緒にパッケージ名を使用する必要がある唯一の状況に言及してはなりませんimportステートメントのように、Javaクラスが別のパッケージにある場合
あなたのアクティビティがsrcフォルダに存在せず、代わりにネストされたフォルダに存在する場合でも、アンドロイドスタジオはマニフェストとアクティビティ自体のリンクを処理する必要があります。もう一度、パッケージ名はそこで使用すべきではありません。

+0

絶対にできませんか?このアプリはこの設定で動作します。それだけでなく、私が採用したメソッドで、別の質問を 'ClassNotFoundException'エラーで読んだので、最近の変更だけです。違いは無かったので、私はデフォルトのフォーマットに戻っています。 –

+0

@ JohanZ。まあこれは変です.. –

関連する問題