![](/img/trans.png)
[英]How do you refer to separate instances of elements of a re-used layout in Android?
[英]How do you create a jar file of classes that can be re-used by multiple Android projects?
這是我到目前為止所遵循的步驟,沒有運氣。 我對Java項目非常陌生,因此我懷疑我可能缺少明顯的東西。
使用Eclipse,我創建了一個名為TestSDK的簡單Java項目,該項目在名為com.test.testsdk的包中以及以下類中創建:
package com.test.testsdk;
public class TestClass {
public void TestMethod() {
}
}
編譯時不會出現錯誤或警告。
然后,我使用Eclipse和標准的導出選項(導出生成的類文件和資源,壓縮JAR的內容,生成清單文件)將其導出為JAR文件(TestSDK.jar)。 我嘗試過密封和不密封JAR,這沒有什么區別。
然后,我從向導列表中的文件->新建->項目創建一個新的Android應用程序項目。 它可以在Android模擬器和我的測試設備上編譯並運行,而不會發出警告或錯誤(我收到了hello world消息)。
然后,我添加對我的TestSDK.jar文件的引用(使用多種不同的方法,稍后將對其進行擴展),將其導入到主要(也是唯一的)Android活動中,並嘗試實例化TestClass並對其調用TestMethod,像這樣:
package com.apptest.mobilesdktestapp;
import android.app.Activity;
import android.os.Bundle;
import com.test.testsdk.TestClass;
public class MobileSDKTestAppActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TestClass test = new TestClass();
test.TestMethod();
}
}
這樣編譯就可以,沒有警告或錯誤。 但是,當嘗試在模擬器或設備上運行它時,在LogCat窗口中出現以下錯誤:
AndroidRuntime Uncaught handler: thread main exiting due to uncaught exception
AndroidRuntime java.lang.NoClassDefFoundError: com.test.testsdk.TestClass
在Web上搜索NoClassDefFoundError
會產生許多有關如何導入JAR文件以使類路徑正確的建議。 結果,我嘗試了以下所有導入JAR文件的方法:
在項目屬性中的Java Build Path的Libraries選項卡中,“添加外部JAR ...”,然后在Order and Export選項卡中檢查(或不檢查,我同時嘗試了)JAR。 還嘗試將JAR移至“訂購和出口”列表的頂部,這沒有什么區別。
在項目中創建一個“ libs”文件夾,然后在其中添加JAR。 我確認JAR隨后也添加到了項目列表中的“ Android Dependencies”中。 還嘗試右鍵單擊JAR文件,然后選擇“構建路徑”->“添加到構建路徑”,這沒有什么區別。
將JAR移至我的Android應用程序項目目錄中,然后執行“添加JAR ...”而不是步驟1中的外部JAR,還包括是否導出以及是否將其移至訂單列表頂部的所有排列。
隨后,我下載了打包為JAR文件的其他第3方SDK,並將它們包含在同一Android應用程序項目中,並且使用上述3種方法中的任何一種都可以正常工作(我可以從這些SDK實例化類並使用他們沒有錯誤),這使我相信我在我的TestSDK項目和/或類中遺漏了某些東西或做錯了什么,從而阻止了它在Android Application項目中使用。
就像我說的那樣,我對Java還是很陌生,所以我希望它被我忽略了。 任何幫助或指導,將不勝感激。
如果您使用的是R17或更高版本的Android工具以及Eclipse中的ADT,那么#2的第一句話就是正確的答案; 您的問題中列出的所有其他內容,充其量是沒有必要的,或者在最壞的情況下是有害的。
我建議您創建一個干凈的項目,創建測試活動,創建libs/
文件夾,將JAR復制到libs/
文件夾中,將代碼復制到JAR的API中,進行編譯並運行。 如果這行得通,那么您以前的工作仍然會在您以前的工作中留下很多困擾您的東西。 如果失敗,則說明發生了相當奇怪的事情。 JAR本身可能很好,否則您將得到編譯錯誤。
我想我知道了問題所在(或者至少是解決問題的方法,但我仍然不確定100%做到了)
當我創建原始的TestSDK Java項目時,我讓它以項目創建對話框(jre7)中的默認JRE為目標。
檢查新的Android應用程序項目的項目屬性,“ Java編譯器”部分的“編譯器符合級別”設置為1.5。 因此,我嘗試再次重新創建TestSDK項目,但是告訴它使用J2SE-1.5作為執行環境,而不是使用默認的jre7。
完成此操作后,導出JAR並將其導入到Android項目的libs目錄中,我現在可以實例化TestSDK類,並且可以正常使用它們而沒有NoClassDefFoundError異常。
最好的猜測是,Android應用程序是針對比我的TestSDK類(我相信針對JavaSE-1.7)更舊的JRE版本編譯的,從而導致了問題。 匹配兩個版本已經解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.