2011-06-13 11 views
8

完全に機能するアプリケーションをライブラリ(Activityクラスを含む)に変換した後、ライブラリ全体のアクティビティを単純にスーパークラスすることによってそのライブラリ全体を使用するアプリケーションを作成しようとしています:ClassNotFoundExceptionによって引き起こされる...

package com.example.baseapp.paid; 

import android.os.Bundle; 
import com.example.baseapp.LibActivity; 


public class PaidActivity extends LibActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
} 

Eclipseがエラーなしでこの新しく「再設計」アプリケーションを構築し、私はそれを実行しようとすると、私は例外を取得:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.baseapp.paid/com.example.baseapp.paid.PaidActivity}: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.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:868) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.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 

私はこれがあるために起こっている理由はわかりません「クラスが見つかりません」のエラーが発生したときeクラスは、構築された派生クラス(エラーなし)であり、今実行しようとしています。

このトラブルシューティングを行うにはどうすればよいですか?

私には何が欠けていますか?これは、ライブラリプロジェクトのAndroidManifest.xmlをある

EDIT(@CaspNZで質問に答える)

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.baseapp" 
     android:versionCode="5" 
     android:versionName="1.1.2"> 
    <uses-sdk android:minSdkVersion="8" /> 

    <uses-permission android:name="android.permission.INTERNET"/> 
</manifest> 

そして、これは使用して、アプリケーションのAndroidManifest.xmlをあります図書館プロジェクト:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.baseapp.paid" 
     android:versionCode="5" 
     android:versionName="1.1.2"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-library android:name="AppLibrary" /> 

    <uses-permission android:name="android.permission.INTERNET"/> 

    <application android:icon="@drawable/icon"> 
     <activity android:name=".PaidActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="com.example.baseapp.LibActivity" android:label="com.example.baseapp.LibActivity:string/rx_label"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="EditPreferences" 
       android:label="com.example.baseapp.LibActivity:string/app_name"> 
     </activity> 
    </application> 
</manifest> 

これは私の初めてのtryiであるため、これを解決するためのヒントがありますライブラリプロジェクトを使用することになりました。私は、この作業を行うための "トリック"に精通していません。

+1

proguardを使用していますか?あなたのクラスはあなたのファイル内にありますか? (アンドロイドディストリビューションのdexdumpを使って、classes.dexがあなたのapkにあることを知ることができます)。 – Snicolas

+0

@Snicolasこれはデバッグモードなので、ProGuardはありません。私は(まだ)デクスダンプで何を探すべきかは知らない。しかし、私はEclipseのリ・ファクタリングが大抵の場合私の作品を投稿して発見して以来、いくつかの進歩を遂げましたが、ライブラリのAndroidManifestにいくらかのゴミを注入したのと同じように、 .xml。私はこれを修正しましたが、まだエラーが発生しています。 – an00b

+0

@Snicolasこれは[他のスレッド](http://stackoverflow.com/questions/6324234/converting-an-existing-application-to-a-library)で1番目の提案を実装しようとした私の試みに関連しています。派生アプリケーション用のライブラリのAndroidManifest.xmlを複製する必要がありますか? – an00b

答えて

1

私はついにこの問題を解決しました。 がが何らかの理由で確認されていなかった、図書館プロジェクトで

  1. 「ライブラリです」:それは私が正しく設定されていない両プロジェクトのプロパティで2つの重要な設定を持っていたことが判明します。 私はそれをチェックすることを誓うことができますが、 は Eclipseの下にAndroidの 開発環境がいかに気まぐれ知って、私はそれ は、いくつかのグリッチの結果としてのEclipse(またはADT プラグイン)でオフにされたと思われます。
  2. アプリケーションプロジェクトでは、 は、Add... ボタンを使用して、私のライブラリープロジェクト を参考にして無視しました。 (私はどんなにばかげてもいい?)

私のような他の初心者にもこの情報が役立つことを願っています。時には、デバッグするのが非常に困難な問題は、無防備で無防備なストレスを感じているプログラマーが、これがすでに処理されていると仮定した場合に設定エラーを隠すことになります。

1

これは、アプリケーションマニフェストの代わりにライブラリマニフェストにアクティビティをリストする場合に発生します。ライブラリマニフェストに<アクティビティ>タグを持つ必要はありません。 (たとえば、this threadを参照してください)

+0

この情報をありがとう(私はこれを知らなかった)。私はライブラリからすべての ' 'と' 'を派生したアプリケーションのマニフェストに移動しましたが、まだ運がありません。私は暗闇の中で頑張っている。 : – an00b

0

私のプロジェクトで同じエラーがありました。どのように私は私の固定を共有することができます。

私のプロジェクトのある時点で、自分のアクティビティクラスがどこにあるのかを使用しているパッケージ名の1つを変更する必要がありました。私がしたとき、私は同じエラーを引き起こしたAndroidManifestを更新するのを忘れてしまった。この問題を修正しました。

10

ADT 22にアップデートした人は、Javaビルドパス>注文と書き出しタブでAndroidのプライベートライブラリをチェックしていることを確認してください。詳細はthisをご覧ください。これは私のために働く。 Eclipseの代わりにAndroid Studioにユーザーを移動させるための小さな力):)

+1

ああああ、後で戦うの4時間と私は私が "最終的なアプリのプロジェクトでも"の部分を逃したと思いました。これは、私が正しく再読んで、私の問題を修正するために行ってきました – Ruddles

+0

私は持っていた同じエラー:**アクティビティのインスタンス化ができません** ComponentInfo **と** java.lang.ClassNotFoundException:**クラスを見つけられませんでした**私はFragmentActivityを拡張していました**これは私のために働いた – vovahost

+0

ありがとうございます。すべてのあなたのプロジェクトを水から吹き飛ばす良い "アップグレード"のように! – ccbunney

関連する問題