4

APK に追加のアセットをダウンロードするために、 http: //developer.android.com/guide/market/expansion-files.html の開発ガイドに従っています。

ライブラリなどのインポートに関するすべての部分を行いました..サンプルコードもメインプログラムに実装しました(拡張ファイルが既にダウンロードされているかどうかを検出するため、それらをダウンロードしてダウンロードを開始する必要がある場合)など)

Eclipse でエラーは発生しませんが、アプリを起動してライブラリからメソッドとクラスを呼び出し始めると、さまざまなクラッシュが発生します。

1 - 最初に、インストール時に、adb はライブラリが見つからないと言います..:

[2012-04-17 22:50:13 - MyApp] adb is running normally.
[2012-04-17 22:50:13 - MyApp] Performing com.gmla.MyApp activity launch
[2012-04-17 22:50:16 - MyApp] Uploading MyApp.apk onto device 'SH16PV801048'
[2012-04-17 22:50:16 - MyApp] Installing MyApp.apk...
[2012-04-17 22:50:22 - MyApp] Success!
[2012-04-17 22:50:22 - Google Play Downloader Library] Could not find Google Play Downloader Library.apk!
[2012-04-17 22:50:22 - Google Play License Library] Could not find Google Play License Library.apk!

これは、ライブラリをインポートしようとした方法のスクリーンショットです: http://floy.fr/perso/floy/expfiles/4.PNG

a) のように Java ビルド パスにプロジェクト インポートを使用してライブラリをメイン プロジェクト プロパティにインポートしました: (ダウンロード ライブラリにもライセンス ライブラリをインポートしました)

また、パートb)のようにjarのみをインポートしようとしました (これでインストール時にエラーはありません)

そして、パートc)のような Android ライブラリのインポート(開発者ガイドで推奨されているもののようですが、これにはコンパイル エラーがあり、Eclipse はいくつかの参照を見つけられず、プロジェクトをビルドできません):

したがって、jar のインポートは最適で、コンパイルとインストールでエラーはないようですが、ライブラリからメソッドとクラスを呼び出しているときに、他のエラーが発生します。

2 - アプリ内:

このメソッドで XAPKFiles の存在を確認するためにヘルパーを使用しようとしている場合:

boolean expansionFilesDelivered() {

        XAPKFile[] xAPKS = {new XAPKFile(true, 3, 687801613L)
        // main file only
        };

        for (XAPKFile xf : xAPKS) {
            String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsMain, xf.mFileVersion);
            if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false))
                return false;
        }
        return true;
    } 

DDMS でこのクラッシュが発生しました。

04-17 23:14:24.614: I/dalvikvm(23201): Could not find method com.google.android.vending.expansion.downloader.Helpers.getExpansionAPKFileName, referenced from method com.gmla.guideaudio.apkexp.GmlaCheckExpFiles.expansionFilesDelivered
04-17 23:14:24.614: W/dalvikvm(23201): VFY: unable to resolve static method 1295: Lcom/google/android/vending/expansion/downloader/Helpers;.getExpansionAPKFileName (Landroid/content/Context;ZI)Ljava/lang/String;
04-17 23:14:24.614: D/dalvikvm(23201): VFY: replacing opcode 0x71 at 0x001b
04-17 23:14:24.614: W/dalvikvm(23201): Unable to resolve superclass of Lcom/gmla/guideaudio/apkexp/GmlaDownloaderService; (250)
04-17 23:14:24.614: W/dalvikvm(23201): Link of class 'Lcom/gmla/guideaudio/apkexp/GmlaDownloaderService;' failed
04-17 23:14:24.614: E/dalvikvm(23201): Could not find class 'com.gmla.guideaudio.apkexp.GmlaDownloaderService', referenced from method com.gmla.guideaudio.apkexp.GmlaCheckExpFiles.onCreate
04-17 23:14:24.614: W/dalvikvm(23201): VFY: unable to resolve const-class 135 (Lcom/gmla/guideaudio/apkexp/GmlaDownloaderService;) in Lcom/gmla/guideaudio/apkexp/GmlaCheckExpFiles;
04-17 23:14:24.614: D/dalvikvm(23201): VFY: replacing opcode 0x1c at 0x001c
04-17 23:14:24.624: V/Performance(23201): >>com.gmla.guideaudio.apkexp.GmlaCheckExpFiles@40db32b0 onCreate
04-17 23:14:24.624: D/AndroidRuntime(23201): Shutting down VM
04-17 23:14:24.624: W/dalvikvm(23201): threadid=1: thread exiting with uncaught exception (group=0x40abf228)
04-17 23:14:24.624: E/AndroidRuntime(23201): FATAL EXCEPTION: main
04-17 23:14:24.624: E/AndroidRuntime(23201): java.lang.NoClassDefFoundError: com.google.android.vending.expansion.downloader.Helpers
04-17 23:14:24.624: E/AndroidRuntime(23201):    at com.gmla.guideaudio.apkexp.GmlaCheckExpFiles.expansionFilesDelivered(GmlaCheckExpFiles.java:64)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at com.gmla.guideaudio.apkexp.GmlaCheckExpFiles.onCreate(GmlaCheckExpFiles.java:22)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.app.Activity.performCreate(Activity.java:4524)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2189)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.app.ActivityThread.access$600(ActivityThread.java:139)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.os.Looper.loop(Looper.java:154)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at android.app.ActivityThread.main(ActivityThread.java:4894)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at java.lang.reflect.Method.invokeNative(Native Method)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at java.lang.reflect.Method.invoke(Method.java:511)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-17 23:14:24.624: E/AndroidRuntime(23201):    at dalvik.system.NativeStart.main(Native Method)

このクラッシュは、ライブラリをインポートするときに方法 1 または 2 を使用しているときに発生します。

ant を最新の 1.8.3 に更新しようとしましたが、1.7.1 ではライブラリのインポートに問題がある可能性があると読んだため、問題を解決できませんでした。

私の主なアプリケーションは Google API 8 (Android 2.2) です。

これを機能させるために多くのことを検索しましたが、今では完全にアイデアがありません!

誰かがこれを機能させる方法を知っていれば、とても親切です:p

この長い投稿で申し訳ありません。私の英語で申し訳ありません。つづりを間違えた場合、それは私がフランス人だからです :p

編集:ダウンローダのサンプル コードをライブラリ インポート メソッドc)で試しましたが、今回はコンパイル エラーはありませんが、インストール中には次のようになります。

[2012-04-18 01:56:16 - GuideAudio] Android Launch!
[2012-04-18 01:56:16 - GuideAudio] adb is running normally.
[2012-04-18 01:56:16 - GuideAudio] Performing com.gmla.guideaudio.GuideAudio activity launch
[2012-04-18 01:56:19 - GuideAudio] Uploading GuideAudio.apk onto device 'SH16PV801048'
[2012-04-18 01:56:19 - GuideAudio] Installing GuideAudio.apk...
[2012-04-18 01:56:21 - GuideAudio] Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY
[2012-04-18 01:56:21 - GuideAudio] Please check logcat output for more details.
[2012-04-18 01:56:21 - GuideAudio] Launch canceled!

ライブラリはよくインポートされているようでわかりません...Eclipseの「参照ライブラリ」の下に表示されます。

マニフェストにも書いています:

<uses-library android:name="com.google.android.vending.expansion.downloader" />
         <uses-library android:name="com.google.android.vending.licensing" />
4

3 に答える 3

3

答えは、同様の質問に対するこの回答にある可能性があります: https ://stackoverflow.com/a/10109546/180538

私も2日前にこの問題を抱えていましたが、答えはそれを解決しました。特に最後の段落を読んでください。

タグはサードパーティのものに使用するための<uses-library>ものではなく、デバイスにインストールされている既存のライブラリにのみ使用されます。各公式Androidデバイスにインストールされているマップのように(例として、Amazon Kindleは公式Androidデバイスではありません)。

また、ライブラリプロジェクトをプロジェクトに追加し、同時にjarをリンクしたかどうかもわかりません。それもトラブルの原因になります。

于 2012-04-18T00:09:05.447 に答える
0

これを読んでいる人のために、拡張ライブラリをインポートするために使用する正しい方法は、私の最初の投稿でc)として言及したものです。

プロジェクト ライブラリをメイン プロジェクトにインポートするときは、パスの長さに注意してください。ワークスペースと同じドライブにない Android SDK インストール フォルダーが原因で、パスが長すぎました。そのため、ライブラリのインポートが失敗する場合があります。(気付くのに1日かかりました.. - _ - )

于 2012-04-18T11:20:46.607 に答える