2014-12-24 54 views
3

好吧,所以我一直試圖找出這個問題幾個星期,並一直在StackOverflow大量查看類似的問題,並試圖將它們應用於我自己的情況無濟於事。我擔心我只是在做一些令人難以置信的愚蠢的事情,或者忘記了一些愚蠢的事情,會浪費別人的時間,但是現在我已經擺脫了選擇和想法,所以如果事情真的如此,我會很抱歉。我沒有使用Eclipse或Android Studio,只是使用CLI Maven。我需要在我的應用程序中使用DrawerLayout,但是由於在運行時無法找到類(並且可能是其他的support-v4包),因此嘗試實例化它時應用程序崩潰。所以,一步一步來。在運行時未在Android Maven項目中找到DrawerLayout

這裏的代碼創建DrawerLayout行:

DrawerLayout drawer = new android.support.v4.widget.DrawerLayout(this); 

下面是如何應用程序崩潰的堆棧跟蹤,當它試圖創建DrawerLayout的新實例。

E/AndroidRuntime(2065): FATAL EXCEPTION: main 
E/AndroidRuntime(2065): Process: com.patron.main, PID: 2065 
E/AndroidRuntime(2065): java.lang.NoClassDefFoundError: android.support.v4.widget.DrawerLayout 
E/AndroidRuntime(2065):  at com.patron.main.FlashMenu.onCreate(FlashMenu.java:120) 
E/AndroidRuntime(2065):  at android.app.Activity.performCreate(Activity.java:5933) 
E/AndroidRuntime(2065):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
E/AndroidRuntime(2065):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
E/AndroidRuntime(2065):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
E/AndroidRuntime(2065):  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
E/AndroidRuntime(2065):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
E/AndroidRuntime(2065):  at android.os.Handler.dispatchMessage(Handler.java:102) 
E/AndroidRuntime(2065):  at android.os.Looper.loop(Looper.java:135) 
E/AndroidRuntime(2065):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
E/AndroidRuntime(2065):  at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime(2065):  at java.lang.reflect.Method.invoke(Method.java:372) 
E/AndroidRuntime(2065):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
E/AndroidRuntime(2065):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
W/ActivityManager(1228): Force finishing activity com.patron.main/.FlashMenu 

這裏是如何我,包括我的pom.xml的依賴:

<dependency> 
    <groupId>com.android.support</groupId> 
    <artifactId>support-v4</artifactId> 
    <version>21.0.3</version> 
    <type>aar</type> 
    <exclusions> 
    <exclusion> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

我使用的是由谷歌在Android的SDK中提供的本地Maven倉庫/演員/安卓/ m2repository由另一個SO帖子建議的文件夾。顯然它可以編譯並運行正常,所以我相信它正確地找到它。當我打電話MVN依賴:內置類路徑,看看編譯時類路徑,這表明我: Classpath

,然後手動打開,在7zip的AAR文件夾,並檢查類罐子,保證DrawerLayout就在那裏,我可以看到它肯定是: DrawerLayout in Classpath

所以在這一點上我不確定我可以改變或做什麼來獲得這個支持包在運行時可用。我詳細地介紹了classpath,並且我相信我沒有兩次導入support-v4軟件包,只有一次,並且根據導入它的錯誤的性質來判斷它,我認爲我不能編譯這些是問題。我嘗試手動設置依賴的範圍來編譯(應該是正確的),然後運行並提供以防萬一沒有運氣。如果任何人有什麼問題可以解決這個NoClassDefFoundError問題,它將不勝感激。

回答

0

想通了。對於後人: 您需要更新到最新版本的Android Maven插件,以避免此錯誤。另外,我遇​​到的一個老bug是ActivityCompat21並沒有在其他幾個類中找到,我通過更新到插件的4.0.0-rc2版本修復了我使用hacky解決方法修復的其他類。

<plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <version>4.0.0-rc.2</version> 
    <extensions>true</extensions> 
    <configuration> 
     <includeLibsJarsFromAar>true</includeLibsJarsFromAar> 
    </configuration> 
</plugin> 
+0

您的構建路徑是怎樣的?你是否還需要將外部jar添加到構建路徑中? – Stephane