2

我正在使用v7支持庫在Android 2.x上顯示ActionBar。Android支持庫ActionBar 2.2版(8級)的NullPointerException - 與preferences.xml衝突

當我將應用程序部署到我的IDE(Intellij IDEA)中的設備時,該應用程序工作正常。

當我使用maven構建並打包要部署到Play商店的應用程序時,我發現我在設備上安裝並運行打包應用程序並導致應用程序崩潰時出現以下異常。 (它也在v8模擬器上失敗)。它在Android v4.3的兩種情況下都能正常工作。

任何想法爲什麼用maven構建時會崩潰?

01-07 15:05:22.671  937-937/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.triopsis.as.mobile.android/com.triopsis.as.mobile.android.activity.MainMenuActivity}: android.view.InflateException: Binary XML file line #25: Error inflating class android.support.v7.internal.widget.ActionBarView 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
     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: android.view.InflateException: Binary XML file line #25: Error inflating class android.support.v7.internal.widget.ActionBarView 
     at android.view.LayoutInflater.createView(LayoutInflater.java:513) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:677) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:614) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
     at android.app.Activity.setContentView(Activity.java:1647) 
     at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:216) 
     at android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.java:180) 
     at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:134) 
     at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76) 
     at com.triopsis.as.mobile.android.activity.MainMenuActivity.onCreate(MainMenuActivity.java:43) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
        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.reflect.InvocationTargetException 
     at android.support.v7.internal.widget.ActionBarView.<init>(ActionBarView.java:218) 
     at java.lang.reflect.Constructor.constructNative(Native Method) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
     at android.view.LayoutInflater.createView(LayoutInflater.java:500) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:677) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:614) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
     at android.app.Activity.setContentView(Activity.java:1647) 
     at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:216) 
     at android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.java:180) 
     at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:134) 
     at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76) 
     at com.triopsis.as.mobile.android.activity.MainMenuActivity.onCreate(MainMenuActivity.java:43) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
     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.NullPointerException 
     at android.support.v7.internal.widget.ActionBarView$HomeView.onFinishInflate(ActionBarView.java:1301) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
     at android.support.v7.internal.widget.ActionBarView.<init>(ActionBarView.java:218) 
     at java.lang.reflect.Constructor.constructNative(Native Method) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
     at android.view.LayoutInflater.createView(LayoutInflater.java:500) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:677) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:614) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
     at android.app.Activity.setContentView(Activity.java:1647) 
     at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:216) 
     at android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.java:180) 
     at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:134) 
     at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76) 
     at com.triopsis.as.mobile.android.activity.MainMenuActivity.onCreate(MainMenuActivity.java:43) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
     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) 

我有行家以下依賴性:

<dependencies> 
    <dependency> 
     <groupId>android</groupId> 
     <artifactId>android</artifactId> 
     <version>4.0_r3</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>android.support</groupId> 
     <artifactId>compatibility-v7-appcompat</artifactId> 
     <version>19.0.1</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>android.support</groupId> 
     <artifactId>compatibility-v7-appcompat</artifactId> 
     <version>19.0.1</version> 
     <type>apklib</type> 
    </dependency> 
    <dependency> 
     <groupId>android.support</groupId> 
     <artifactId>compatibility-v13</artifactId> 
     <version>19.0.1</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 

及以下Maven的Android的插件配置:

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
      <artifactId>android-maven-plugin</artifactId> 
      <version>3.8.2</version> 
      <configuration> 
       <sdk> 
        <platform>14</platform> 
       </sdk> 
      </configuration> 
      <extensions>true</extensions> 
     </plugin> 
    </plugins> 
</build> 

UPDATE

它採取了雖然,但我發現,當我有res/xml時具有PreferenceScreen設置的/preferences.xml文件會導致此崩潰。如果我刪除這個文件,那麼它不會崩潰。 任何人都知道爲什麼會導致這個問題?

+0

也許你的Maven安裝不嵌入支持庫? – lithos35

+0

如何查看它是否已正確嵌入? –

+0

我不是Maven高手,但是你有''標籤和一些'support-vXX' artifactID嗎? – lithos35

回答

1

您是否絕對需要android-maven-plugin版本3.8.2的功能?它似乎是bugy。

在將android-maven-plugin從版本3.8.0更新爲3.8.2後,我們的項目中出現類似問題。

回到版本3.8.0解決了這個問題。

症狀:
我們的結論是,問題是在apklib的鏈接,所有ressources引用(版式,圖形...)似乎disaligned。例如,顯示佈局或可繪製而不是另一個。在佈局中訪問缺少的引用/ ID時,應用程序崩潰(由於加載了錯誤的佈局,引用不存在)。

見問題http://code.google.com/p/maven-android-plugin/issues/detail?id=441

+0

嗨!感謝回覆!我會退回該版本並檢查是否仍有問題。從你的鏈接看來,這個問題可能在即將到來的3.8.3版本中得到解決。 –

+0

是的,我們迴歸到3.8.0,因爲這是我們在我們以前測試過的版本,但問題似乎並沒有在3.8.1中出現,我在maven-android-plugin問題列表中看到他們正在處理它。 –

+0

謝謝爲我工作,會花一段時間,我將問題隔離到maven,再次感謝。 –