2012-07-30 100 views
6

我一直在爲使用android可比性庫(android-support-v4)的android應用程序工作。在SDK 20之前,我能夠使用我的清單中的以下uses-sdk條目編譯我的應用程序。片段兼容性onActivityResult()不工作

<uses-sdk android:minSdkVersion="7" /> 

我開始活動結果的所有片段都正確地收到了結果。有一天(在我更新到SDK 20之前)我正在修復lint問題,並且根據lint標誌的請求向清單中添加了android:targetSdkVersion,並且我很快意識到我的碎片沒有一個正在接收它們的onActivityResilt()調用。

現在,每當我更新到SDK 20.0.1時,我都被迫在清單中使用uses-sdk條目中的android:targetSdkVersion條目;否則R.java永遠不會生成。

這是我目前的uses-sdk清單項

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="16" /> 

因爲這奇怪的bug目前,我的應用程序目前仍在打破。 我試着更新我的兼容庫最新版本r9。

此外,我已經雙重檢查了我的所有startActivityForResult()調用片段。他們都通過片段的方法使用正確的調用。

this.startActivityForResult(intent, requestCode); 

this.getActivity().startActivityForResult(intent, requestCode); 

我目前的開發環境:

Android SDK 20.0.1 
Android SDK Platform Tools 13 
ADT 20.0.2 

任何幫助將不勝感激,因爲這錯誤是CUR當然是阻止我進行最終測試的磚牆。

編輯

這裏是我的ant debug

$螞蟻調試 輸出構建文件: /home/ricky/Development/workspace/location_ringer/LocationRinger/build.xml

- 設置模式檢查:

-set-debug-files:

-check-env:[checkenv] Android SDK Tools Revision 20.0。1 [checkenv]安裝在/應用程序/機器人-SDK-linux_86

-setup: [回波]項目名稱:ListActivity [的GetType]項目類型:應用

-set調試模式:

-debug-混淆檢查:

-build-設置: [迴音]解決建設目標ListActivity ... [getTarget方法]項目目標:谷歌的API [getTarget方法]賣方:谷歌 公司[getTarget方法]平臺版本:4.1 [gettarget] API等級:
[echo] ---------- [echo]如果需要創建輸出目錄... [echo] ---------- [echo]解決ListActivity的依賴關係... [依賴項]庫依賴項:[依賴項] [依賴項] ------------------ [依賴項]有序庫:[依賴項] [依賴項] --- --------------- [依賴項] API < = 15:將annotations.jar添加到類路徑中。 [迴音] ---------- [迴音]與調試「建設圖書館......

nodeps:

-set模式檢查:

-set -debug-文件:

-check-ENV:checkenv] Android SDK工具版本20.0.1 [checkenv]在/應用/ Android的SDK-linux_86安裝

-setup: [迴音]項目名稱:LocationLib [gettype]項目類型:Android庫

-set調試模式:

-debug-混淆檢查:

-build-設置: [迴音]解決建設目標LocationLib ... [getTarget方法]項目目標:谷歌API [gettarget]供應商:Google Inc. [gettarget]平臺版本:4.1 [gettarget] API等級:
[echo] ---------- [echo]如果需要,創建輸出目錄。 .. [echo] ---------- [echo]解決LocationLib的依賴關係... [de [依賴項]庫依賴項:[依賴項]無庫[依賴項] [依賴項] ------------------ [依賴項] API < = 15:將 annotations.jar添加到類路徑。

- 預編譯:

-code根:[mergemanifest]在AndroidManifest文件沒有變更。 [echo]處理aidl文件... [aidl]沒有要編譯的AIDL文件。 [echo] ---------- [echo]處理RenderScript文件... [renderscript]無法編譯RenderScript文件。 [回聲] ---------- [回聲]處理資源... [aapt]沒有變化的資源。 R.java和Manifest.java保持不變。 [echo] ---------- [echo]處理BuildConfig類... [buildconfig]不需要生成新的BuildConfig。

- 預編譯:

-compile: [迴音]創建庫輸出jar文件...

-post編譯:

-obfuscate:

-dex : [echo]庫項目:不要轉換字節碼...

-crunch:[crunch]在源代碼目錄中琢磨PNG文件:/家庭/瑞奇/開發/工作區/ location_library/LocationLib/RES
[危機]爲目的地DIR: /家庭/瑞奇/開發/工作區/ location_library/LocationLib /斌/ RES [危機]嘎吱嘎吱0 PNG文件更新緩存

-package資源: [迴音]庫項目:不打包資源...

-package: [迴音]庫項目:不打包APK ...

-post-package:

-do-debug: [echo]庫項目:不要創建apk ... [propertyfile]更新屬性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop [propertyfile ]更新屬性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop [propertyfile]更新屬性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build。丙 [propertyfile]更新屬性文件: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop

-post建造:

調試:

nodeps:

-set模式檢查:

-set-調試文件:

-check-ENV:[checkenv] Android SDK工具修訂20.0 .1 [checkenv]安裝在/ app/android-sdk-linux_86

-setup: [echo]項目名稱:ExceptionHandlerLib [gettype]項目類型:Android庫

-set調試模式:

-debug-混淆檢查:

-build-設置: [迴音]解決建設目標ExceptionHandlerLib ... [getTarget方法]項目目標:安卓4.1 [getTarget方法] API級別:
[迴音] ---------- [迴音]如果需要創建輸出目錄... [迴音] ---------- [echo]解決ExceptionHandlerLib的依賴關係...[依賴項]庫依賴項:[依賴項]無庫 [依賴項] [依賴項] ------------------ [依賴項] API < = 15: 將annotations.jar添加到類路徑。

- 預編譯:

-code根:[mergemanifest]在AndroidManifest文件沒有變更。 [echo]處理aidl文件... [aidl]沒有要編譯的AIDL文件。 [echo] ---------- [echo]處理RenderScript文件... [renderscript]無法編譯RenderScript文件。 [回聲] ---------- [回聲]處理資源... [aapt]沒有變化的資源。 R.java和Manifest.java保持不變。 [echo] ---------- [echo]處理BuildConfig類... [buildconfig]不需要生成新的BuildConfig。

- 預編譯:

-compile: [迴音]創建庫輸出jar文件...

-post編譯:

-obfuscate:

-dex : [echo]庫項目:不要轉換字節碼...

-crunch:[crunch]在源代碼目錄中琢磨PNG文件:/ home/ricky /開發/工作區/ exception_handler_library/ExceptionHandlerLib/res [crunch]搗蛋0個PNG文件即將更新緩存

-package資源: [迴音]庫項目:不打包資源...

-package: [迴音]庫項目:不打包APK ...

- 後包裝:

-do-debug: [echo]庫項目:不要創建apk ... [propertyfile]更新屬性文件: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop [propertyfile ]更新屬性文件: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build/prop [propertyfile]道具 [propertyfile]更新屬性文件: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop

-post建造:

調試:

-pre-構建:

-code根:[mergemanifest]合併AndroidManifest文件合併爲一個。 [mergemanifest]合併項目和2個庫中的清單。 [mergemanifest]警告:[AndroidManifest.xml:3, AndroidManifest。注:主要清單缺少聲明,默認值爲 minSdkVersion或1. [mergemanifest]警告:[AndroidManifest.xml:3, AndroidManifest [xml:3]主清單有庫存使用targetSdkVersion = '16' [mergemanifest] .XML:13]主清單具有但庫使用targetSdkVersion = '16' [mergemanifest]注意:主清單缺乏聲明,默認爲值 的minSdkVersion或1

BUILD FAILED /應用程序/機器人-sdk- linux_86/tools/ant/build.xml:616:null

總時間:2秒

編輯

我看着/app/android-sdk-linux_86/tools/ant/build.xml:616,發現下面一行扔空enabled="${manifestmerger.enabled}">

這裏是整個塊

我會嘗試禁用清單合併選項一看個究竟

編輯

這似乎是去除manifestmerger.enabled =從project.properties真正解決了我的問題。該項目現在編譯並完美工作。我想我應該向android團隊報告這個bug。我的表現有以下條目

<uses-sdk android:minSdkVersion="7" /> 

然而onActivityResult()如果我提出高於7的targetSdkVersion仍然不叫,所以這並不能真正解決根本問題,但我的項目現在能正常使用

+0

支持庫的哪個版本您使用的? v9通過'onActivityResult(..)'修復了一些明顯的錯誤。 – 2012-08-01 18:10:39

+0

我正在使用android-support-v4 r9 – 2012-08-01 18:28:07

+0

你用'android:targetSdkVersion =「7」'試過了嗎? – pawelzieba 2012-08-01 19:59:28

回答

0

這似乎是從project.properties中刪除manifestmerger.enabled = true s堅持我的問​​題。該項目現在編譯並完美工作。我想我應該向android團隊報告這個bug。我的表現有以下條目

<uses-sdk android:minSdkVersion="7" /> 

然而onActivityResult()如果我提出高於7的targetSdkVersion仍然不叫,所以這並不能真正解決根本問題,但我的項目現在能正常使用

0

有一個在兼容包中的錯誤(見thisthis

+0

我知道這個錯誤,但它是由時間r9出來的固定。我已經檢查確保onActivityResult()沒有在片段活動中調用 – 2012-08-05 13:36:50

2

這裏有幾個建議:

  • 如果你只是想能不能在android:targetSdkVersion您的清單,你應該能夠在Project Explorer中在Eclipse中右鍵單擊您的項目,並選擇Android的工具>清除皮棉標記

  • 檢查,以確保所有的FragmentActivity派生類延伸,從兼容性庫(android.support.v4.app.Fragmentandroid.support.v4.app.FragmentActivity),沒有正確的類意外延長了那些在框架(android.app.Fragmentandroid.app.Activity)。

而且,我覺得奇怪的是,如果你設置你的targetSdkVersion比16以外的任何其他是否有問題/控制檯/皮棉窗口中顯示任何具體問題你的項目沒有編?也請檢查您是否有其他的目標提供和/或選擇項目構建目標(右擊工程,屬性>的Android)。

+0

我已經進行了雙重檢查以確保我的應用程序正在使用android.support.v4.app。*。 此外,我試圖刪除'targetSdkVersion'並清除棉絨標記沒有成功。 – 2012-08-06 14:40:35

+0

**屬性> Android **下的我的構建目標設置爲16.我還發現,如果將'targetSdkVersion'設置爲16,則不會生成R.java。我目前正在嘗試使用不同的API級別構建。 – 2012-08-06 14:55:33

+0

奇怪的是,沒有錯誤消息說明R.java沒有被生成。至於我上面的評論,我沒有改變**屬性> Android **下的API構建目標。 – 2012-08-06 15:07:59

0

下載最新的ADT確保你也有這一個覆蓋您的支持jar在您的項目後:

android-sdk\extras\android\support\v4\android-support-v4.jar

它使用的是舊罐子,同時運行的是最新的ADT是可能的。

否則我只會想到你的碎片收到他們的onActivityResult()調用如果父活動不叫super.onActivityResult(requestCode, resultCode, data);

編輯

顯式的增加,這是必要爲我的項目:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane); 
    fragment.onActivityResult(requestCode, resultCode, data); 
} 
+0

是的,我證實我有最新的。這個bug存在於r7和r9中 – 2012-08-08 17:36:21

+0

你說過「當我將目標版本更改爲16以外的任何內容時,我的項目無法編譯」。當你減少目標版本時,你會遇到什麼問題?這意味着你在你的項目中使用了更高級別的API,而不是你認爲的那樣。 – Graeme 2012-08-09 08:13:45

+0

看到我的編輯可能的修復 – Graeme 2012-08-09 12:57:48

6

在片段(錯誤 startActivityForResult)

getActivty().startActivityForResult(intent, requestCode); 
// Cannot receive in fragment 

在片段(正確 startActivityForResult)

startActivityForResult(intent, requestCode); 
// use Fragment.startActivityForRusult() 
// not Activity.startActivityForRusult() 

在活動

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
} 

在片段

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Do Action 
} 
+0

謝謝,它適用於我...正確的答案 – Sachin 2015-08-18 08:01:00