AndroidアプリにAIDLファイルを追加するにはどうすればよいですか(アプリ内課金の例から)


136

現在、EclipseアプリをAndroid Studioに移行しています。このアプリはアプリ内課金を使用していました。

私の主な問題は、プロジェクトとaidlファイルをコンパイルすることです(私はあなたがすべてこのファイルを使用していると思います

私はこのエラーメッセージを受け取ります:

Gradle: error: cannot find symbol class IInAppBillingService
Gradle: error: package IInAppBillingService does not exist

そこで、いくつかのチュートリアルに従って、このファイルをcom.mypackage.billingからsrc / main / aidlに移動します(このリファレンスを参照

しかし、そうすると同時に、次のメッセージが表示されます。

Gradle:タスク ':xxxxxxxxxxx:compileDebugAidl'の実行に失敗しました。

コマンドの実行に失敗しました:(...)C:\ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl:45インターフェイスIInAppBillingServiceは、com \ xxxxxxxx \ billing \ IInAppBillingServiceというファイルで宣言する必要があります.aidl。

このメッセージは、上でリンクしたGoogleバグページの投稿と明らかに矛盾しています。

誰かがこのAIDLファイルを機能させるために成功し、私を助けることができますか?

ここに画像の説明を入力してください

ただお知らせするために、私がたどったいくつかのリンク:


質問は...このaidlファイルであるべきではありません/src/main/aidl/com/android/vending/billingか?
セルビン2013

1
Gradle:タスク ':MyProject:compileDebugAidl'の実行に失敗しました。>コマンドの実行に失敗しました:45インターフェイスIInAppBillingServiceは、com \ android \ vending \ billing \ IInAppBillingService.aidlというファイルで宣言する必要があります。
Waza_Be 2013

1
セルヴィンと私が言っているフォルダにまだそれを入れていないと私に告げる何か...?
Sam Dozor 2013

ちょうど新しいスクリーンショットを追加し、私はあなたが私に言った私は、フォルダに入れて考えて...
Waza_Be

selvin.pl/TrivialDriveProject.Gradle.zip(local.propertiesの sdk dirを変更)... gradlew.bat assembleそしてそれはチャームのように機能します...フォルダーが/ src / main / aidl / com / android / vending / billingであることを確認します/src/main/aidl/com.android.vending.billingではありませんか?AS 0.2.1?Gradle 0.5。+?
セルヴィン2013

回答:


162

エラーメッセージが示すように、IInAppBillingService.aidlパッケージ(com.android.vending.billing)によって指示された正しいディレクトリに配置する必要があります。

src/main/aidl/既にあるフォルダー内で、.aidlファイルをに置きますcom/android/vending/billing/


5
これを行うと、Gradle:エラー:シンボルクラスIInAppBillingServiceが見つかりません
Waza_Be

9
/ src / main / aidl / com / android / vending / billingにありますか?ビルドにgradleを使用していますか?その場合は、Android Studioの右上にある小さなGradleボタンを押して、gradleのリロード設定を行うか、Android Studioを閉じるか開きます。
Sam Dozor 2013

80
明確にするために。src / main /の下にディレクトリaidlを作成します。次に、新しいパッケージcom.android.vending.billingを追加します。次に、aidlファイルを新しいパッケージにコピーします。code.google.com/p/android/issues/detail?id=56755を
Kalel Wade

2
@Kalel Wadeこれが私の解決策でした。答えとして追加してください。
2014年

3
src / mainがない場合は、aidlディレクトリをどこかに作成し、build.gradleで指定します。android {sourceSets {main {aidl {srcDirs 'actual_path ..'
aleb

221

これはかなりの数の人々を助けるように思えたので、これを答えとして追加します。

  1. 「src / main /」の下に「aidl」という名前の新しいディレクトリを作成します。' src / main / aidl 'のようになります。
  2. 新しいパッケージ名「com.android.vending.billing」をディレクトリ「src / main / aidl」に追加します
  3. SDKの場所を見つけて、「sdk \ extras \ google \ play_billing」に移動します。SDKのデフォルトの場所は「C:\ Program Files(x86)\ Android \ android-sdk」です。カスタムで変更した場合は、SDKマネージャーを使用して場所を特定する必要があります。
  4. 上記で作成したパッケージに「IInAppBillingService.aidl」コピーします。最終的には、次の画像のようになります。

結果のスクリーンショット

  1. プロジェクトを再構築し、それで問題ありません。

注:参照が機能しない場合は、必要なインポートを必ず含めてください

import com.android.vending.billing.IInAppBillingService;

https://issuetracker.google.com/issues/36973270

コメントから編集

これを行った後も、コード内のIInAppBillingServiceへの参照はエラーとして強調表示されましたが、アプリを再構築した後、クラスが認識されました


1
明確にするために、これを完全に読んでください!私はもう一度強調しませんでした...それは良い追加です... com.android.vending.billingを新しい「main / aidl」ディレクトリに入れてください!
ボーイ

5
これを行った後も、コード内のIInAppBillingServiceへの参照はエラーとして強調表示されましたが、アプリを再構築した後、クラスが認識されました。
arlomedia 2014

これはうまくいきましたが、モジュールを追加することを選択したときに、なぜこれがすべて自動的ではないのですか?
Android開発者

再構築プロジェクトのヒントをありがとう。また、フォルダーとパッケージはフレーバーで作成できます。メインにある必要はありません。(たとえば、アプリの1つのフレーバーでアプリ課金のみを行う場合)
Mike Fosker

4
私があなたの答えになるまで、この問題を解決するために20分を費やしました。それから私は、「あなたが最後にこの回答に投票...」というエラーを得るためにそれをupvoteしようとした私は何人かの人々が学ぶことはありませんと思います:)
beetree

10

ここに示す残りの投稿は、ここに示すような新しいフォルダを作成するまで機能しませんでした。

ここに画像の説明を入力してください


9
  • src/main呼び出されたディレクトリに新しいディレクトリを作成しますaidl
  • ディレクトリを右クリックしてaidl選択new->add package
  • パッケージの名前を入力してください com.android.vending.billing

  • IInAppBillingService.aidlディレクトリAndroid/Sdk/extras/google/play_billingからディレクトリにコピーしますApp_name/app/src/main/aidl/com/android/vending/billing

  • 次に、InApp課金コーディングを続行します。InApp関連サービスを定義しているときにエラーが発生します can not resolve symbol IInAppBillingXXXXXX
  • 今まで後藤Buildアンドロイドスタジオのメニューから、上をクリックRebuild Project。これはIInAppBillingService.java内部にファイルを生成しますApp_Name/app/build/generated/source/aidl/debug/com/android/vending/billing。これで問題は解決します。

@MOHSENNAVABI問題ありません:-)
Praveena、2015

「IInAppBillingService.aidl」ファイルをコピーした後、このファイルの行を変更する必要がありますか?エラー「aidl.exe」がゼロ以外の終了値1で終了したことを回避するためのサンプルからのパッケージ名であるため、パッケージ名を置き換えるように求めるいくつかのメモを見てきました。これを行うための具体的な指示は何ですか?
Pablo Alfonso

7

このコードをbuild.gradleに追加します

android {
    sourceSets {
        main {
            aidl.srcDirs = ['src']
        }
    }
}

AIDLクラスの再構築とインポート


2

上記の回答はファイルの場所に集中していますが、すでに正しく設定されているようです。私はこれと同じ問題をAndroid Studioで経験しましたが、リストされている回答のどれもそれを解決せず、1時間頭を叩きました。最終的に、明らかなインポートが欠落していることに気付きました。

 import com.android.vending.billing.IInAppBillingService;

追加すると、このエラーメッセージは解決されました。

このインポートは、Google Billingのドキュメントには記載されておらず、見つけたコード例にも含まれていません。経験豊富なJava開発者にとっては明白かもしれませんが、初心者が最初のプロジェクトを学習しようとするだけの場合は、明示的に指摘する必要があります。


1

追加する必要があります

  1. フォルダーを作成する-src / main / aidl / packagenameとこの下にaidlファイルを配置します。

  2. AIDLファイルで、パッケージ名を言及します。パッケージpackagename

プロジェクトをクリーンアップし、プロジェクトを再ビルドします-app \ build \ generated \ source \ aidl \ debug \ packagename \ youraidl.javaで生成されたAIDLに対応するJavaファイルを作成できます


1

私はそれがとても簡単に聞こえることを知っていますが、私はグーグルサンプルのすべてのフォルダから貼り付けをコピーします

https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive/app/src/main

aidl / com / android / vending / billing

プロジェクト補助にコピーしました(Android Studioでプロジェクトビューを設定しました)

次に、プロジェクトをクリーンアップして再構築しましたが、参照が見つかりました。


0

私はすべてのソリューションを試しましたが、問題は、Android Studioが、何らかの理由で、設定で指定されたものとは異なるAIDLパッケージを含むモジュールのビルドタイプでコンパイルされたことです。デバッグのリリースに、他のモジュールはAIDLのPKGを見ることができませんでしたので。デバッグからリリースに切り替えて元に戻し、問題を解決しました。


0

Android Studioを再起動するとうまくいきました

しばらく時間がかかった2番目の愚かなこと。私は彼がファイルを作成できるようにAndroid Studioにコードをドロップしましたが、彼は代わりに.java(予想どおり)を作成しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.