2016-12-14 77 views
1

我有一個Android項目,裏面有一個庫模塊,我的項目工作正常,編譯項目我得到.aar包含在一個測試項目中,一切正常。 現在,我已經在我的庫模塊添加一個擴展應用程序的活動,Y添加了這個類在庫Android可能包括.aar with activity extends Application?

<application 
     android:allowBackup="true" 
     android:label="@string/app_name" 
     android:name=".MyActivityExtendsApplications" 

當我測試它的作品完美的項目,但是當我坐的manifiest.xml。 aar並在其他項目上測試失敗。問題是,它沒有找到活動擴展應用...我反編譯了AAR和我看到的一切是正確的,所有的類都是文件夾內 的錯誤是

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mylibrary.MyActivityExtendsApplications" on path: DexPathList[[zip file "/data/app/com.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapplication-1/lib/arm, /vendor/lib, /system/lib]] 
Suppressed: java.lang.ClassNotFoundException: com.mylibrary.MyActivityExtendsApplications 
         at java.lang.Class.classForName(Native Method) 
         at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
         at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
         at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
          ... 12 more 
        Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 

我加入grandle依賴關係庫.aar在所有情況下以同樣的方式

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:24.2.1' 
    compile 'com.android.support:design:24.2.1' 
    testCompile 'junit:junit:4.12' 
    compile '[email protected]' 

} 
repositories{ 
    flatDir{ 
     dirs 'libs' 

    } 
} 

我查一下我的測試項目合併清單和活動是有

application 
     android:name="com.mylibrary.MyActivityExtendsApplications" 
     android:allowBackup="true" 

而且我可以在我的測試項目中導入此活動並查看代碼

並且我在libs文件夾中添加了mylibrary。 當我刪除活動MyActivityExtendsApplications時,我的庫工作正常。

+0

你是通過一個活動擴展一個應用程序來瞄準什麼? – petrumo

+0

嗨@petrumo,我需要這個,因爲我的aar實現http://altbeacon.github.io/android-beacon-library/samples.html,我需要從後臺開始 – AnD

+0

哇,我很驚訝,一個活動是偶數能夠擴展應用程序。這當然不是Android Beacon庫用於後臺啓動的預期用法。我不想用這個不尋常的應用程序用法問題來解決這個問題,但如果需要,我很樂意在另一個問題中解決它。 – davidgyoung

回答

1

問題可能出在您生成庫的時候缺少Android Beacon庫aar文件,異常描述僅僅是誤導。我不認爲aar文件中的類會在生成新的aar文件時自動合併。您可能會檢查這些文件(如Beacon.class)是否從您的aar中丟失。

如果這確實是問題,有兩種可能的解決方案:

  • 在您的應用程序,參考你的庫文件AAR和Android燈塔庫AAR文件。
  • 將第一個aar文件中的類合併到您的新aar文件中。之前我曾經做過這件事,但我很樂意分享一個相當不雅的shell腳本,但可能有更好的方法來完成同樣的事情。
+0

非常感謝@davidgyoung,我認爲就像.aar包含manifest.xml一樣,我還包含了在使用android studio創建庫模塊時生成的build.grandle。我的錯誤,我沒有意識到你的項目類不包括在內。另一方面,是否有可能使用與目標項目的build.grandle合併的build.grandle來執行.aar?類似於.framework的IOS,在資源中可以添加資源到它的庫中。謝謝,爲你的幫助,我藉此機會祝賀你的非凡庫 – AnD

+0

是的,我不知道有什麼辦法可以做這自動在Gradle或Android Studio中,但我還沒有在一年或更長時間內研究過它。下面是我爲了解決問題而提出的hacky shell腳本。這是基於一個庫項目,該項目將Android Beacon庫作爲其子級目錄中的一個子級項目。使用此腳本需要您自擔風險! https://gist.github.com/davidgyoung/aada365eeb69db12027532c32243674f – davidgyoung

+0

非常感謝腳本,@davidgyoung,今天和幾周前,當我爲我的iOS應用程序提供幫助時,我搜索了有關ibeacon協議的信息,並且發現了您的信息對其他人的解釋。謝謝 :) – AnD