2013-05-01 33 views
1

我想在Android中創建一個庫項目,並在其他項目中使用該庫。包括JAR庫到Android項目,並從它開始一個活動

我創建了一個簡單的庫項目,其中一個佈局顯示一些文本。檢查它被設置爲'is Library'並且已經去。

我把'bin'目錄中創建的Jar文件複製到'assets'文件夾中的一個新項目中(同樣嘗試了'libs'方法)。

我檢查過'屬性 - > java構建路徑 - >訂單和導出',它在那裏並被選中。

在應用程序中,我試圖從庫中推出的活動,使用:

Button btnLoad = (Button)findViewById(R.id.btnLoadLibrary); 
    btnLoad.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, LibraryActivity.class); 
      startActivityForResult(intent, 0); 
     } 
    }); 

已經導入庫:這裏

import com.example.superlibrary.LibraryActivity; 

沒有錯誤。

然後,當我啓動應用程序,並按下按鈕,我得到:

05-01 20:24:07.030: E/AndroidRuntime(19011): FATAL EXCEPTION: main 
05-01 20:24:07.030: E/AndroidRuntime(19011): java.lang.NoClassDefFoundError: com.example.superlibrary.R$layout 
05-01 20:24:07.030: E/AndroidRuntime(19011): at com.example.superlibrary.LibraryActivity.onCreate(LibraryActivity.java:12) 
05-01 20:24:07.030: E/AndroidRuntime(19011): at android.app.Activity.performCreate(Activity.java:5206) 
05-01 20:24:07.030: E/AndroidRuntime(19011): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 

爲了確保,我已經檢查應用程序的清單文件,我必須有:

<activity 
     android:name="com.example.superlibrary.LibraryActivity" 
     android:label="LibraryActivity" > 
    </activity> 

所以它被認可幷包括在內...

任何想法爲什麼會發生這個錯誤? (java.lang.NoClassDefFoundError)

謝謝!

回答

0

http://developer.android.com/tools/projects/index.html

按照文檔

然而,庫項目從一個標準的Android應用程序項目不同,你不能直接編譯到它自己的apk和Android設備上運行。同樣,不能像導出真正的庫一樣將庫項目導出爲獨立的JAR文件。相反,您必須通過引用相關應用程序中的庫並構建該應用程序來間接編譯庫。

當您構建依賴庫項目的應用程序時,SDK工具會將庫編譯爲臨時JAR文件並在主項目中使用它,然後使用結果生成.apk。

無法將庫項目導出到JAR文件

庫不能作爲二進制文件(例如JAR文件)分發。這將在未來版本的SDK工具中添加。

你需要在你的android項目中引用一個庫項目。

檢查下面的鏈接。

http://developer.android.com/tools/projects/projects-eclipse.html

+0

我開始一個活動認爲在SDK-17中你可以這樣做 - 至少這是在某些地方寫的。 – Roman 2013-05-01 17:41:55

+0

如果沒有 - 是否有隱藏所有庫代碼的方法? – Roman 2013-05-01 17:42:17

+0

@roman我剛剛從文檔中引用了上述內容。我沒有看到你在第一條評論 – Raghunandan 2013-05-01 17:44:56

1

Eclipse是非常挑剔與增加外部利布斯,我曾經有過工作是複製和粘貼的lib的項目,然後打開Eclipse中的lib文件夾,並在新項目中右鍵單擊的唯一方法項目瀏覽器中的項目並單擊刷新。說到這一點,請確保該庫出現在libs文件夾和Android Dependencies文件夾中 如下面的屏幕截圖所示。

enter image description here

+0

是的,所有:) – Roman 2013-05-01 17:58:51

+0

然後你需要檢查你的Java構建路徑,這個錯誤告訴你你錯誤地添加了一個庫。 – yams 2013-05-01 21:51:37

0

這絕對是可能的,包括廣口瓶中,Android項目,並從它開始活動。 以下鏈接深入討論瞭如何建立一個庫項目,以及如何詳細引用庫項目

http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject

下面的代碼允許您從罐子

final Intent it = new Intent(android.content.Intent.ACTION_VIEW); 
it.setClassName(getApplicationContext(), "<complete path of the Activity class>"); 
startActivity(it);