6

私は、Androidの比較可能性ライブラリ(android-support-v4)を利用するAndroid用のアプリケーションに取り組んでいます。SDK 20より前uses-sdkは、マニフェストの次のエントリを使用してアプリケーションをコンパイルできました。

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

結果のアクティビティを開始したすべてのフラグメントは、適切に結果を受け取りました。

ある日(SDK 20に更新する前)、lintの問題を修正android:targetSdkVersionし、lintフラグの要求に従ってマニフェストに追加しましたが、すぐにフラグメントがonActivityResilt()呼び出しを受信して​​いないことに気付きました。

SDK 20.0.1にアップデートしてから、マニフェストのandroid:targetSdkVersioninuses-sdkエントリを使用する必要があります。それ以外の場合、R.javaは生成されません。

これが私の現在のuses-sdkマニフェストエントリです

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

現在、この奇妙なバグのために、私のアプリケーションは現在も壊れています。互換性のあるライブラリを最新バージョン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

このバグは現在、私の最終的なベータテストを妨げているレンガの壁であるため、助けていただければ幸いです。

編集

これが私の出力ですant debug

$ ant debugビルドファイル:/home/ricky/Development/workspace/location_ringer/LocationRinger/build.xml

-set-mode-check:

-set-debug-files:

-check-env:[checkenv]AndroidSDKツールリビジョン20.0.1[checkenv]/ app/android-sdk-linux_86にインストール

-セットアップ:[echo]プロジェクト名:ListActivity [gettype]プロジェクトタイプ:アプリケーション

-set-debug-mode:

-デバッグ-難読化-チェック:

-build-setup:[echo]ListActivityのビルドターゲットを解決しています...[gettarget]プロジェクトターゲット:Google API [gettarget]ベンダー:Google Inc. [gettarget]プラットフォームバージョン:4.1 [gettarget] APIレベル:
16[echo]- ---------[echo]必要に応じて出力ディレクトリを作成しています...[echo]---------- [echo]ListActivityの依存関係を解決しています...[dependency]ライブラリの依存関係:[依存関係][依存関係]------------------[依存関係]順序付けられたライブラリ:[依存関係][依存関係]--------------- ---[依存関係]API<= 15:クラスパスにannotations.jarを追加します。[echo] ----------[echo]'debug'を使用したライブラリの構築...

nodeps:

-set-mode-check:

-set-debug-files:

-check-env:[checkenv]AndroidSDKツールリビジョン20.0.1[checkenv]/ app/android-sdk-linux_86にインストール

-セットアップ:[echo]プロジェクト名:LocationLib [gettype]プロジェクトタイプ:Androidライブラリ

-set-debug-mode:

-デバッグ-難読化-チェック:

-build-setup:[echo]LocationLibのビルドターゲットを解決しています...[gettarget]プロジェクトターゲット:Google API [gettarget]ベンダー:Google Inc. [gettarget]プラットフォームバージョン:4.1 [gettarget] APIレベル:
16[echo]- ---------[echo]必要に応じて出力ディレクトリを作成しています...[echo]---------- [echo]LocationLibの依存関係を解決しています...[dependency]ライブラリの依存関係:[依存関係]ライブラリなし[依存関係][依存関係]------------------[依存関係]API<= 15:クラスパスにannotations.jarを追加します。

-ビルド前:

-code-gen:[mergemanifest]AndroidManifestファイルに変更はありません。[echo]aidlファイルを処理しています...[aidl]コンパイルするAIDLファイルがありません。[echo] ----------[echo]RenderScriptファイルの処理...[renderscript]コンパイルするRenderScriptファイルがありません。[echo]----------[echo]リソースの処理...[aapt]変更されたリソースはありません。R.javaとManifest.javaはそのままです。[echo] ----------[echo]BuildConfigクラスを処理しています...[buildconfig]新しいBuildConfigを生成する必要はありません。

-プリコンパイル:

-コンパイル:[echo]ライブラリ出力jarファイルを作成しています...

-コンパイル後:

-難読化:

-dex:[echo]ライブラリプロジェクト:バイトコードを変換しない...

-crunch:[crunch]ソースディレクトリのPNGファイルのクランチ:/ home / ricky / Development / worksheet / location_library / LocationLib / res
[crunch]宛先ディレクトリ:/ home / ricky / Development / worksheet / location_library / LocationLib / bin / res [クランチ]キャッシュを更新するために0個のPNGファイルをクランチ

-package-resources:[echo]ライブラリプロジェクト:リソースをパッケージ化しないでください...

-パッケージ:[echo]ライブラリプロジェクト:apkをパッケージ化しないでください...

-パッケージ後:

-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.prop [propertyfile]プロパティファイルの更新: /home/ricky/Development/workspace/location_library/LocationLib/bin/build.prop

-ビルド後:

デバッグ:

nodeps:

-set-mode-check:

-set-debug-files:

-check-env:[checkenv]AndroidSDKツールリビジョン20.0.1[checkenv]/ app/android-sdk-linux_86にインストール

-セットアップ:[echo]プロジェクト名:ExceptionHandlerLib [gettype]プロジェクトタイプ:Androidライブラリ

-set-debug-mode:

-デバッグ-難読化-チェック:

-build-setup:[echo]ExceptionHandlerLibのビルドターゲットを解決しています...[gettarget]プロジェクトターゲット:Android 4.1 [gettarget] APIレベル:
16 [echo]----------[echo]出力ディレクトリを作成しています必要に応じて...[echo]---------- [echo]ExceptionHandlerLibの依存関係を解決しています...[dependency]ライブラリの依存関係:[dependency]ライブラリなし[dependency] [dependency] ----- -------------[依存関係]API<= 15:クラスパスにannotations.jarを追加します。

-ビルド前:

-code-gen:[mergemanifest]AndroidManifestファイルに変更はありません。[echo]aidlファイルを処理しています...[aidl]コンパイルするAIDLファイルがありません。[echo] ----------[echo]RenderScriptファイルの処理...[renderscript]コンパイルするRenderScriptファイルがありません。[echo]----------[echo]リソースの処理...[aapt]変更されたリソースはありません。R.javaとManifest.javaはそのままです。[echo] ----------[echo]BuildConfigクラスを処理しています...[buildconfig]新しいBuildConfigを生成する必要はありません。

-プリコンパイル:

-コンパイル:[echo]ライブラリ出力jarファイルを作成しています...

-コンパイル後:

-難読化:

-dex:[echo]ライブラリプロジェクト:バイトコードを変換しない...

-crunch:[crunch]ソースディレクトリ内のPNGファイルのクランチ:/ home / ricky / Development / worksheet / exception_handler_library / ExceptionHandlerLib / res [crunch]宛先ディレクトリへ:/ home / ricky / Development /ワークスペース/exception_handler_library/ ExceptionHandlerLib / bin / res [クランチ]キャッシュを更新するために0個のPNGファイルをクランチ

-package-resources:[echo]ライブラリプロジェクト:リソースをパッケージ化しないでください...

-パッケージ:[echo]ライブラリプロジェクト: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]プロパティファイルの更新:/home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop [propertyfile]プロパティファイルの更新: /home/ricky/Development/workspace/exception_handler_library/ExceptionHandlerLib/bin/build.prop

-ビルド後:

デバッグ:

-ビルド前:

-code-gen:[mergemanifest]AndroidManifestファイルを1つにマージします。[mergemanifest]プロジェクトと2つのライブラリからのマニフェストをマージします。[mergemanifest]警告:[AndroidManifest.xml:3、AndroidManifest.xml:3]メインマニフェストにはありますが、ライブラリはtargetSdkVersion = '16'を使用します[mergemanifest]注:メインマニフェストには宣言がなく、デフォルトで値minSdkVersionまたは1になります。[mergemanifest ]警告:[AndroidManifest.xml:3、AndroidManifest.xml:13]メインマニフェストにはありますが、ライブラリはtargetSdkVersion = '16'を使用します[mergemanifest]注:メインマニフェストには宣言がなく、デフォルトで値minSdkVersionまたは1になります。

ビルドに失敗しました/app/android-sdk-linux_86/tools/ant/build.xml:616:null

合計時間:2秒

編集

調べてみる/app/android-sdk-linux_86/tools/ant/build.xml:616と、次の行がnullをスローしていることがわかりましたenabled="${manifestmerger.enabled}">

これがブロック全体です

マニフェストのマージオプションを無効にして、何が起こるかを確認します

編集

project.propertiesからmanifestmerger.enabled=trueを削除することで、私の問題は解決したようです。プロジェクトがコンパイルされ、完全に機能するようになりました。このバグをAndroidチームに報告する必要があると思います。私のマニフェストには次のエントリがあります

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

ただし、targetSdkVersionを7より高くしても、onActivityResult()はまだ呼び出されないため、これは根本的な問題を実際には解決しませんが、プロジェクトは正常に機能しています。

4

5 に答える 5

7

フラグメント内 (間違った startActivityForResult)

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

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
}
于 2013-08-28T02:01:00.417 に答える
2

以下にいくつかの提案を示します。

  • マニフェストに含めないようにしたいだけの場合は、EclipseのProject Explorerでプロジェクトを右クリックし、 Android Tools > Clear Lint Markersandroid:targetSdkVersionを選択できるはずです。

  • Fragmentすべてのおよび派生クラスが互換性ライブラリ (および)Activityから正しいクラスを拡張し、フレームワーク (および) のクラスを誤って拡張していないことを確認してください。android.support.v4.app.Fragmentandroid.support.v4.app.FragmentActivityandroid.app.Fragmentandroid.app.Activity

targetSdkVersionまた、 16 以外に設定すると、プロジェクトがコンパイルされないのは奇妙だと思います。Problems/Console/Lint ウィンドウに示されている特定の問題はありますか? また、他のターゲットが利用可能かどうか、および/またはプロジェクト ビルド ターゲットとして選択されているかどうかを確認してください (プロジェクトを右クリックし、 [プロパティ] > [ Android ] )。

于 2012-08-05T21:14:35.413 に答える
0

互換性パックにバグがあります (これこれを参照してください)

于 2012-08-05T02:58:13.643 に答える
0

project.properties から manifestmerger.enabled=true を削除すると、問題が解決したようです。プロジェクトがコンパイルされ、完全に動作するようになりました。このバグを Android チームに報告する必要があると思います。私のマニフェストには次のエントリがあります

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

ただし、targetSdkVersion を 7 より高くしても onActivityResult() は呼び出されないため、根本的な問題は解決しませんが、プロジェクトは正常に動作するようになりました。

于 2013-01-20T15:22:30.483 に答える
0

最新の ADT をダウンロードした後、プロジェクト内のサポート jar を次のもので上書きすることも確認してください。

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

最新の ADT の実行中に古い jar を使用している可能性があります。

それ以外の場合、親アクティビティが呼び出されていない場合にのみ、フラグメントが 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);
}
于 2012-08-08T16:02:26.900 に答える