プレイストアでアプリを更新してから問題が発生しました。この更新以降、例外がスローされますが、この例外に関連するものは何も変更していません。
スタックトレース:
Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.opiatefuchs.onthejobtimerlight/de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity}: Java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[Zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2236)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
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:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[Zip file "/data/app/de.opiatefuchs.onthejobtimerlight-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:1066)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2226)
... 10 more
Suppressed: Java.lang.ClassNotFoundException: de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity
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
問題は、以前の私のアプリのバージョンは問題なく実行され、このアクティビティに関連するものは何も変更していないということです。このアクティビティとは関係のない新しい情報ダイアログを追加しました。このアプリは無料のライトバージョンです。プロバージョンでもまったく同じ変更を加えましたが、何もスローされません。これは期待どおりに機能します。 proとliteの唯一の違いは、LiteバージョンにAdmob(新しい方法)を統合し、proバージョンにGoogle Playライセンスを統合したことです。しかし、これは最初から統合しており、これに変更を加えていません。また、マニフェストに変更を加えていません。ここで多くの投稿を読みましたが、何も助けにはなりません。
Android 5.0以降のバージョンで発生するようです。この問題が引き起こす可能性のあるアイデアや、同じ経験を誰かが持っている人はいますか? 、変更なし)?
私はこの例外に関連する変更を加えていないと言ったように、この問題にとって重要ではないため、コードを投稿しませんでした。
この質問は重複としてマークされていますが、そうではありません。リンク付きのコメントは私の問題を解決しません。すべてのライブラリがチェックされ、正しい方法で統合されます。また、NDKは使用していません。
久しぶりに、それはプロガードと関係があるに違いないことが判明しました。エラーの原因を正確に言うことはできませんが、少し試してみたところ、気づきました(Eclipse IDEの場合)。
それが私がやった4つのポイントであり、それはうまくいきました。これは疑わしいように見えますが、難読化には問題があると思います。これらのポイントを実行しなくても、apkをコンパイルしてEclipseからインストールするだけです。私にとって、この動作の明白な理由はありません。また、Eclipseからのみインストールする場合、パッケージ名は変更なしで機能します。これらのポイントが誰かを助けることを願っています。
マニフェストパッケージ名がOKの場合、プロジェクトをクラッシュさせ、ファイルエクスプローラーでプロジェクトの名前を変更したが、プロジェクトをインポートした後、この問題が再び発生する場合、ここでの唯一の方法は
そのフォルダを削除。gradle。
これは、エクスプローラーを使用してプロジェクトフォルダーにあります。古いプロジェクトの名前を含むアーティファクトファイルがあります。 Android Studioでプロジェクトを再度開くと、フォルダーは自動的に再作成されます。
Gradleをcom.Android.tools.build:gradle:2.2.2からcom.Android.tools.build:gradle:2.2.0に変更したところ、問題は解決しました!
私にとっては、パッケージ名(ディレクトリ名)が変更されたときに起こりました。
「build」フォルダがプロジェクトビルドの中間ファイルを魔法のように保持していることに気付きました。 「app」フォルダーの下の「build」フォルダーを削除しました。ここで、gradleはすべてのファイルを新しいパッケージ名で再作成する必要がありました。今では正常に動作しています。
複数のモジュールがある場合、multidexと複数のパッケージ名に関係があると思います。プロジェクトをクリーンアップし、すべてのビルド/フォルダーを削除します。
tl; dr:これは、AndroidManifest.xml
の相対宣言と絶対宣言の両方が混在していることが原因のようです。 <application .../>
、<activity .../>
、<receiver .../>
、および<service .../>
をAndroidManifest.xml
で宣言するとき、最良の解決策は相対表記を使用することだと思います。
TOO LONGでこの問題が発生したのは、<application .../>
で絶対および相対<activity .../>
、<receiver .../>
、<service .../>
、およびAndroidManifest.xml
宣言を使用していたためです。これを修正するために私がしたことは次のとおりです。
AndroidManifest.xml
セクションで<manifest .../>
セクションにpackage:
プロパティが正しく指定されていることを確認してください。次のように、正確な絶対パスである必要があります。
<manifest
package="com.my.absolute.package.path"
xmlns:Android="http://schemas.Android.com/apk/res/Android">...</manifest>
<manifest .../>
セクションで正しい絶対パスが指定されたので、<application .../>
で定義されているすべての<activity .../>
、<receiver .../>
、<service .../>
、およびAndroidManifest.xml
に相対パスを使用する必要があります。
例:
<application
Android:name=".BaseApplication"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<activity
Android:name=".activity.SomeActivity"
Android:configChanges="orientation"
Android:label="@string/app_name"
Android:parentActivityName=".activity.ParentActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value=".activity.ParentActivity"/>
</activity>
<activity
Android:name=".activity.MyActivity"
Android:configChanges="orientation"
Android:label="@string/app_name"
Android:parentActivityName=".activity.ParentActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme"
/>
<receiver
Android:name=".receivers.MyReceiver"
Android:enabled="true"
Android:exported="false">
</receiver>
<service
Android:name=".services.MyService"
Android:enabled="true"
Android:exported="false"
/>
</application>
もちろん、プロジェクトも必ず削除してください。
署名されたapkファイルを生成するときに、依存ライブラリの問題(jarライブラリの複製)がある場合、このエラーが発生することがあります。ビルドパスを確認し、重複するライブラリを削除し、注文とエクスポートタブでチェックされていないライブラリがあるかどうかを確認してください。
その理由は、Android dexpathで特定のアクティビティを見つけることができません。
したがって、「マニフェストファイル」でアクティビティの完全なパスを提供する必要があります。
たとえば、アクティビティ名は「SplashActivity」であり、「com.packagename.package」にあります。そのため、そのアクティビティのパッケージ名全体を提供する必要があります。
com.packagename.package.SplashActivity
追加した
compile "com.Android.support:support-core-utils:25.3.1"
compile 'com.Android.support:support-v4:25.3.1'
私は同様の問題を抱えていました、私の解決策は次のとおりです:
ディレクトリ名を変更してインポートするだけでディレクトリ名を変更した後、同様のエラーが発生しました。もうインストールできません。 USBデバッグを再度有効にすることも、プロジェクトを再構築することもできません。
新しいプロジェクトを作成し、関連するすべてのコンテンツを新しいプロジェクトに手動でコピーすることで解決します。