最近、市場にアプリを公開しましたが、一部のユーザーからエラーが表示されるようになりました。おそらく、アプリは起動時にクラッシュします。残念ながら、直接彼に連絡することはできず、アプリはエミュレーターと私の電話(および一部の友人の電話)で正常に動作します。
編集:市場で「開始時のクラッシュ」や「機能しない」などのコメントを受け取ったときに、これは複数のユーザーに起こると思います。このスタックトレースは1つしか受け取りませんでしたが、構成、デバイス、Androidバージョンなどに関する情報はありません。
このアプリはシンプルなサウンドボードなので、魔法はまったく関係ありませんが、一部の携帯電話で失敗する理由はわかりません。ここに私が得ているスタックトレースがあります、私は誰でも私を助けてくれることを願っています:
Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.app/com.my.app.SoundMachine}: Java.lang.ClassNotFoundException: com.my.app.SoundMachine in loader dalvik.system.PathClassLoader[/mnt/asec/com.my.app-1/pkg.apk]
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2585)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2679)
at Android.app.ActivityThread.access$2300(ActivityThread.Java:125)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:2033)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:123)
at Android.app.ActivityThread.main(ActivityThread.Java:4627)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:521)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:876)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:634)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: com.my.app.SoundMachine in loader dalvik.system.PathClassLoader[/mnt/asec/com.my.app-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.Java:243)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:573)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:532)
at Android.app.Instrumentation.newActivity(Instrumentation.Java:1021)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2577)
... 11 more
これらは私の活動の最初の数行です。
public class SoundMachine extends Activity {
private SoundManager mSoundManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
編集:これは(ほぼ)完全なonCreateです:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSoundManager = new SoundManager();
mSoundManager.initSounds(getBaseContext());
int counter = 0;
for (Integer soundFile : soundFiles) {
counter++;
mSoundManager.addSound(counter, soundFile);
}
ImageButton SoundButton1 = (ImageButton) findViewById(R.id.sound1);
SoundButton1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mSoundManager.playSound(1);
}
});
SoundButton1.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
saveSoundChoice(soundFiles[0], soundNames[0]);
return true;
}
});
(...more of this...)
Button StopButton = (Button) findViewById(R.id.stopbutton);
StopButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mSoundManager.stopAll();
}
});
}
そしてここに私のマニフェストがあります:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.my.app" Android:installLocation="preferExternal"
Android:versionCode="9" Android:versionName="1.2">
<application Android:icon="@drawable/icon" Android:label="@string/app_name">
<activity Android:name=".SoundMachine" Android:label="@string/app_name"
Android:screenOrientation="portrait">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-sdk Android:minSdkVersion="3" Android:targetSdkVersion="8" />
</manifest>
したがって、私がここで読んだ可能性のあるすべてのエラーは、一部のフォーラムで私のアプリには適用されません。
エラーの原因を特定することは、それを再現することなく特定するのが難しいことを知っていますが、誰かが素晴らしいアイデアを持っており、私を助けることができるかもしれません。
いくつかの質問:
編集:現在残っている主な質問は次のとおりです。PathClassLoaderのパスがパッケージ名と異なるのはなぜですか? John J Smithが投稿したページは同じ問題を扱っているようですが、そこで適用された修正がわかりません。
ありがとう、Select0r
ADTはリビジョン22(2013年5月)に更新されているため、Project-> Properties-> Java Build Path- >古いプロジェクトがこの例外を取り除くためにEclipseでOrder and Export...
Project-> properties-> order and exportを選択してこの問題を解決しました
すべての外部jarファイルを選択します。きれいにしてビルドして問題を解決しました
同じエラーが発生しました(アクティビティをインスタンス化できません...)Opera Mini。Opera MiniはSDカードにありましたエラーは、昨日SDカードを交換したという事実に関連しているようです。デバイスをシャットダウンし、古いカードからすべてのデータを(cp -aで)新しいカードにコピーしてから、新しいカードを挿入しましたすべて正常に機能しているように見えますが、SDカード上のすべてのアプリが同じエラーでクラッシュすることがわかりました。
だから、これはAndroidバグであり、アプリ開発者が修正できるものではないということです。
参照: http://Android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html
AndroidデバイスでSDカードを交換する場合、古いカードの内容を新しいカードに物理的にコピーすると、システムは新しいカードのデータを使用します何も変わっていないかのようにカード。これは、SDカードにインストールされたアプリにも当てはまります。」
これは間違っているようです。
これは、パッケージ名の1つをリファクタリングし、リファクタリングツールが先頭の「。」を削除したときに起こりました。すべてのアクティビティ名から。 AndroidManifest.xmlで、Android:name = "MyActivity"をAndroid:name = "。MyActivity"に変更する必要がありました
これが誰かを助けることを願って、私はちょうど時間を無駄にしたo
これはOPの質問には当てはまりませんが、それは私のものであり、それを理解するのにかなり時間がかかりました。GoogleMaps APIを使用する場合は、アプリケーションマニフェストにライブラリ宣言を含めたことを確認してください。
例えば:
public class MyActivity extends MapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
AndroidManifest.xml
:
<application>
<uses-library Android:name="com.google.Android.maps" />
<activity Android:name="MyActivity" Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Manifiestファイルの上部で定義されているパッケージを見て、クラスが定義されているパッケージと一致することを確認します。
私の問題は、一致するパッケージ名がなかったことです。
また、「s」が付いた「libs」という名前のフォルダーがあることもわかります。追加したすべてのjarファイルをその中に入れて、ビルドパスに追加します。
私はあなたと同じ問題を抱えていて、何時間も検索した後、私は何か面白いものを発見しました。それをできるだけ明確に公開するようにします。
ただし、プログラムのmanifest.xmlファイルには奇妙なことがありました。パッケージの名前は古い「myapp.sound」でした。マニフェストを正しい新しい名前に変更し、その瞬間からエラーが発生しました。理由はわかりませんが、Eclipseの「パッケージ名チェンジャー」がすべての依存関係を更新するわけではないようです。厳密に必要でない場合は、アクティビティを含むパッケージの名前を変更しないでください。たぶん、問題を解決するには、新しいプロジェクトを作成し、その中にすべてのJavaクラスをコピーする必要があります。
PathClassLoaderのパスがパッケージ名と異なる理由はわかりませんが、エミュレータでテストするときは、このように強制的に閉じてからもう一度実行してください link
アプリを簡単にアップグレードした後、同じエラーメッセージが表示されました。これを行うことで修正しました:
Project->Build automatically OFF
Project->Clean->Selcting my project
次に、署名済みアプリの新しいエクスポートを実行しましたが、うまくいきました。
Bobf Caliと同様に、ベースパッケージの名前を変更して "example"セクションを変更した後、最初にこのエラーが発生しました。修正するには、genおよびbinディレクトリを削除し、プロジェクトをクリーンアップして、再構築する必要がありました。
注 Eclipseのバージョンに応じてAndroid使用しているプラグイン(存在する場合)、AndroidManifest.xmlのアクティビティ名も更新する必要がある場合があります
Java Android JavaSE-1.7を対象とするプロジェクトのビルドパスにプロジェクトを含めると、この問題に遭遇しました。
何らかの理由で、含まれていたJavaプロジェクトがJavaSE-1.6をターゲットとして最初に作成された場合、エミュレータはクラスを見つけられません。Eclipseは「ビルドパスは実行環境JavaSE 1.6。この環境と完全に互換性のあるJREがワークスペースにインストールされていません。 "しかし、Androidエミュレーターが起動し、classnotfoundexceptionが表示されません
したがって、JavaSE-1.7を対象とするプロジェクトを含める場合は、JavaSE-1.6を対象とするプロジェクトを再作成すると、問題が解決する場合があります。
がんばろう!
この問題は、アクティビティクラスに1つ以上のパラメーターを持つコンストラクターがある場合にも発生する可能性があります。
この問題は、クラスの名前を変更してマニフェストファイルを更新し、マニフェストファイルがエミュレーターで更新されない場合に発生する可能性があります。エミュレータからアプリケーションをアンインストールしてから、再インストールしてください。これは動作します。
この記事をご覧ください: http://www.androidguys.com/2010/05/22/storing-apps-sd-froyo/ SDカードにアプリを保存する際の制限について説明しています。ユーザーがコンピューターにSDカードをマウントしている場合、SoundMachineクラスが見えなくなる可能性があります。そして、アプリのユーザーIDとファイルの所有権が一致しないようにファイルの所有権を変更する可能性があるため、cpコマンドが失敗するかどうか(perjaの修正の試み).
/ srcディレクトリがプロジェクト>プロパティ> Javaビルドパス>ソースにリストされていることを確認してください
パッケージ名は一意ですか?ユーザーが同じパッケージ名を使用する別のアプリを持っている場合はどうなるかわかりませんが、このような奇妙なエラーが発生する可能性があります。
編集: このページ を見たところ、Androidマーケットからアプリをダウンロードするときにこの問題があったことを覚えています。起動時にアプリがクラッシュしました。何度も何度も同じ結果で終わりましたが、その後、アプリをアンインストールして再インストールしましたが、すべて正常に機能しました。
私のリンクでは、アプリを到達不能(SDのマウント解除)にすることでエラーが再現されていることもわかります。したがって、コードに問題はありません。
このエラーは、(プロジェクトレベルで)誤ってImport> Android> Existing Android Eclipse経由でワークスペースにコードを挿入します。私の場合、これは空の「src」フォルダーになりましたが、ルートの「Java」で始まり、パッケージパス(com/zyzcorp/...)に続く新しいフォルダーに気づき、MainActivity.Javaファイルに至りました。
問題を解決できると思ったことをテストするために、com。*。MainActivity.Javaファイルをsrcフォルダーにコピーし、Eclipseを更新、クリーン、および再始動しました。ターゲットデバイスでアプリをビルドして実行できました。
私はこれを解決し、原因を突き止めることができました:-マニフェストが破損します。パッケージ構造が正しく、すべてのデータが正しく書き込まれていても、アクティビティは見つかりません。 -Rは、名前を変更する前に最初に宣言されたパッケージ構造になります。 -Rの間違ったパッケージを使用して実行構成がセットアップされているため、アクティビティが見つかりません。
試したこと:-エクスポート/インポートを介して手動でrun-configsを編集する-手動でパッケージ構造の名前を変更する-手動でR-package-structureの名前を変更する-run-configを削除する(アプリを起動しようとすると再構築されます) )
解決策:マニフェストを再利用せずに新しいプロジェクトをセットアップしてください。私はそれを再利用しようとしましたが、同じ問題を繰り返しました。したがって、主な原因は破損したマニフェストでなければなりません。これがお役に立てば幸いです!
問題を解決するには遅すぎるかもしれませんが、他の人の助けになることを願っています。
同様の問題が発生したため、何度も試行した後、R.Java.
それはトリックでした。
いつでもパッケージの名前を変更しましたか?これは通常、作成後にパッケージの名前が変更された場合に発生します。その場合、次のリンクが役立つはずです http://code.google.com/p/Android/issues/detail?id=2824 。そうでない場合は、完全なマニフェストファイルを投稿してください。
「bin」と「gen」フォルダーを削除し、プロジェクトを再構築することでこの問題を修正します。
私は自分でこれに問題を抱えていたので、私に問題を引き起こしたものを持ち出したいと思います。拡張APKを設定する新しいライブラリをいくつか追加しました。ライブラリは相互に依存しており、プロパティの1つだけをライブラリに含めていました> Android> libraries。
そのため、ほとんどのユーザーが持っている携帯電話のライブラリがユーザーにない場合に、これが起こる可能性があります。
私のメインアクティビティでClassNotFoundException
が表示されたのは、見つからないライブラリにあるクラスを実装しているためです。
5つの異なるパッケージがありました。そして、何らかの理由で、コンパイラは間違ったパッケージのアクティビティを探していました。
そのため、アクティビティと、アクティビティを継承するすべてのクラスを、対象のパッケージに切り替えました。
Logcatの最初に探していたパッケージの名前を取得しました。
Android Projectからの依存関係->プロパティ-> Javaビルダーパス-> Android依存関係のチェックを外して、同じ問題を解決しました。
最近のAndroidプロジェクトで同じ問題が発生しました。問題は非常に単純であることが判明しましたが、見つけるのは困難でした。これは私に起こりました。パッケージのリファクタリングが行われなかったため、これによりgen /.../ R.Javaファイルとの競合が発生しました。 。classNotFoundException ...
これから学んだ教訓:do ない メインアクティビティを保持するパッケージ名をリファクタリングします!
これがあなたやこのエラーで頭を壊した人に役立つことを願っています!
私は同じ問題を抱えていますが、これはそれを修正しました。私のandroidmanifest.xmlには、Android:name = myappnameActivityと呼ばれるこの行がありました。クラス名は単にmyappnameでしたが。したがって、私はxmlファイルのアクティビティ部分を外し、すべてがうまくいきました。
明らかな間違いは見当たりません。私が言えることは、できるだけ多くの異なる構成でテストすることです。
可能なすべてのSDKレベルについてエミュレータでテストし、 さまざまなサイズの画面 でテストするためのガイドラインに従います(ただし、それは問題ではないようです)。
HTC Sense、Motoblurなどの友人がいる場合は、各主要プロバイダーの電話でテストしてみてください。
レポートが1つしか表示されない場合は、そのデバイスで厄介な問題が発生している可能性があります。より多くのデータを追加する他の同様のレポートを取得するかどうかを確認します。
BINおよびGENフォルダーファイルを削除します。再構築、すべてが動作するはずです。 「インスタンス化できません」の下に別のエラーがあるかどうかを確認します。別のエラーがこれを起動している場合があります(クラスが見つかった場合でも、アクティビティが原因でロードできません)。
私がしなければならなかったことは、コードをまったく変更せずに、ビルド/エクスポートプロセスをやり直すだけです。それは私のために働いた、私はそれを2回エクスポートすることでした。最初のエクスポートでは、ビルドAPKのファイルサイズは小さく、2番目のエクスポート(コード/構成に変更を加えない)では、わずかに大きなファイルサイズ(約200KBの差分)が生成されました。
このビルドのバグは非常にコストがかかり、マネージャーの前であなたを殺してしまいます。Android/ Eclipseチームによって実際に修正されるはずです。種類の吸い込み