2012-05-13 22 views
2

私は同じカテゴリの100の問題について読んだことがありますが、何も助けませんでした。私は動作しているアプリケーションを持っていて、パッケージ名をリファクタリングしてコンパイルして実行しました。 1週間後、私はそれに取り組み、起動時にClassNotFoundExceptionを取得します。さらに悪いことに、リポジトリから以前のコミットをチェックアウトすると(すべてのリファクタリングの前にあるもの)、そのプロジェクトは起動時に同じエラーが発生します(別のパッケージ名を除いて)。サービスをインスタンス化できません:ClassNotFoundException

私は考えることができるすべてを試しましたが、問題を追跡する方法がわかりません。私は明白なことをしました:プロジェクトをきれいにして、それを完全に削除して、それを再追加して、新しいデバイスで実行してください...

デバッグに役立つコードはわかりませんが、私のマニフェストとlogcatの出力。何か他のものが役に立ったら、私に知らせてください。私は本当にここで失われています。

クラッシュ:

E/AndroidRuntime( 515): FATAL EXCEPTION: main 
E/AndroidRuntime( 515): java.lang.RuntimeException: Unable to instantiate service 
co.mosic.mosic.CommunicationService: java.lang.ClassNotFoundException: co.mosic.mosic.CommunicationService 
E/AndroidRuntime( 515): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2237) 
E/AndroidRuntime( 515): at android.app.ActivityThread.access$1600(ActivityThread.java:123) 
E/AndroidRuntime( 515): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 
E/AndroidRuntime( 515): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 515): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime( 515): at android.app.ActivityThread.main(ActivityThread.java:4424) 
E/AndroidRuntime( 515): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 515): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime( 515): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
E/AndroidRuntime( 515): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
E/AndroidRuntime( 515): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime( 515): Caused by: java.lang.ClassNotFoundException: co.mosic.mosic.CommunicationService 
E/AndroidRuntime( 515): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
E/AndroidRuntime( 515): at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
E/AndroidRuntime( 515): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
E/AndroidRuntime( 515): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2234) 
E/AndroidRuntime( 515): ... 10 more 

マニフェスト:私の頭の上の

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="co.mosic.mosic" 
    android:versionCode="1" 
    android:versionName="1.0" > 

... 

<service 
    android:name=".CommunicationService" > 
    <intent-filter> 
     <action android:name="co.mosic.mosic.MStcServiceInet" /> 
    </intent-filter> 
</service> 
+0

修正済みです!私は本当にどのように確信しています。最終的には、 "lib"フォルダを "libs"に変更していましたが、以前は "lib"という名前でした。最近私のJavaコンパイラも変更しましたが、正確な時間枠は覚えていません。おそらく、それは瓶のフォルダ名を選ぶのでしょうか?実際には、リファクタリング、クリーニング、リビルドのために数時間を費やしました... – jarvisteve

+0

はい私は 'libs'が' ant'スクリプトの正しい名前だと思います。 –

答えて

4

ADTプラグインが最近更新されたため、ライブラリフォルダをlibではなく「libs」に変更する必要がありました。私は最近数回それを見つけました。

0

、このタイプのエラーの最も一般的な原因は、proguard.flagsファイルが欠落しています。

Proguardはコード上で実行され、すべての名前を難読化します。サービスクラスに-keepフラグを指定していない場合、その名前も変更されるため、OSはそれを見つけることができません。

私が推測するのは、適切なプロガード構成ファイルをコミットするのを忘れてしまったことでしょう。

+0

ありがとう、それは素晴らしい考えでした。しかし、私は '-keep public class CommunicationService'と' -keep public class co.mosic.mosic.CommunicationService'を試しました。 – jarvisteve