how can I add the aidl file to Android studio (from the in-app billing example)
AndroidAndroid StudioGradleAndroid Gradle-PluginAidlAndroid Problem Overview
I am currently migrating an Eclipse app to Android Studio. This app was using the in app billing.
My main problem is to compile the project and the aidl file (I guess you all use this file)
I get this error message:
Gradle: error: cannot find symbol class IInAppBillingService
Gradle: error: package IInAppBillingService does not exist
So, following some tutorials, I move this file from com.mypackage.billing to src/main/aidl (see this reference)
But as soon, as I do that, I get this message:
> Gradle: Execution failed for task ':xxxxxxxxxxx:compileDebugAidl'. > > Failed to run command: > (...) C:\Users\xxxx\AndroidStudioProjects\xxxxxxProject\xxxxxxx\src\main\aidl\IInAppBillingService.aidl:45 > interface IInAppBillingService should be declared in a file called > com\xxxxxxxx\billing\IInAppBillingService.aidl.
The message is clearly a contradiction with the post from the Google bug page I linked above.
Anyone suceeded to make this aidl file to work and can help me?
Just to inform, some links I followed:
Android Solutions
Solution 1 - Android
Adding this as an answer since it seemed to help quite a few people.
- Create a new directory named 'aidl' under 'src/main/'. It should look like 'src/main/aidl'.
- Add a new package name 'com.android.vending.billing' to the directory 'src/main/aidl'
- Locate your sdk location and go to "sdk\extras\google\play_billing". Default location for the sdk is "C:\Program Files (x86)\Android\android-sdk". If you custom changed it, then you will have to figure out the location through the sdk manager.
- Copy 'IInAppBillingService.aidl' into the package created above. In the end, it should look similar to the image below.
- Rebuild project and it should be good to go.
Note: Make sure you include the necessary import if your reference isn't working
import com.android.vending.billing.IInAppBillingService;
https://issuetracker.google.com/issues/36973270
Edit From Comment
After I did this, the references to IInAppBillingService in my code were still highlighted as errors, but after rebuilding the app, the class was recognized
Solution 2 - Android
Just as the error message says, you need to put IInAppBillingService.aidl
in the correct directory dictated by it's package (com.android.vending.billing).
Within the src/main/aidl/
folder you already have, put the .aidl
file in com/android/vending/billing/
.
Solution 3 - Android
-
Create new directory under
src/main
calledaidl
-
Right click on directory
aidl
, selectnew->add package
-
Enter Name of the package
com.android.vending.billing
-
Copy
IInAppBillingService.aidl
from the directoryAndroid/Sdk/extras/google/play_billing
to the directoryApp_name/app/src/main/aidl/com/android/vending/billing
-
Now go ahead with InApp billing coding and while defining InApp related services you will get an error
can not resolve symbol IInAppBillingXXXXXX
-
Now goto to
Build
from android studio menu , click onRebuild Project
. This will generateIInAppBillingService.java
file insideApp_Name/app/build/generated/source/aidl/debug/com/android/vending/billing
. This will solve the issue.
Solution 4 - Android
Solution 5 - Android
Add this code in build.gradle
android {
sourceSets {
main {
aidl.srcDirs = ['src']
}
}
}
Rebuild and import aidl class
Solution 6 - Android
The above answers concentrate on file location, but it appears you already had that set correctly. I experienced this same issue in Android Studio, but none of the listed answers resolved it, and I banged my head against it for an hour. Eventually, I realized that I was missing an obvious import:
import com.android.vending.billing.IInAppBillingService;
Once I added that it resolved this error message.
This import isn't mentioned in any of the Google Billing docs or included in any of the code examples that I found. While it may be obvious to experienced Java developers, beginners just trying to learn their first project may need it explicitly pointed out.
Solution 7 - Android
We need to add
-
create folder - src/main/aidl/packagename and place aidl file under this.
-
In the aidl file - mention the package name. package packagename
Now clean the project, rebuild the project - We can the corresponding java file for the aidl generated in app\build\generated\source\aidl\debug\packagename\youraidl.java
Solution 8 - Android
I know it sounds so easy, but I copy paste from google sample all folder
https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive/app/src/main
> aidl/com/android/vending/billing > > copied into project aidl ( I had set project view in Android Studio)
and next I clean and rebuild project and it found a reference.
Solution 9 - Android
I've tried every solutions, but the problem was that Android Studio had compiled, with any apparent reason, in a different build type of the module that contains the AIDL packages than it was specified by the settings. From debug to release, so the other modules couldn't see the AIDL pkg. Switching from debug to release and turns back, solved my problem.
Solution 10 - Android
restarting Android Studio worked for me
a second silly thing that took me a while. I dropped the code on Android Studio to allow him create the file, but he created a .java (as expected) instead a .aidl Jiji, stupid of me
Solution 11 - Android
if you do all the names correct go to Build>rebuild project it worked for me
Solution 12 - Android
I use Android Studio 4.1, just right click mouse -> New -> AIDL -> AIDL File. A file will be created and placed in the [src/main/aidl] folder automatically. The aidl folder will also be created if it does not exist.
This function only supports min sdk 16+. My old project still can be supported, you can temporarily modify the min sdk to 16, create aidl and build project. After the relative interface and class be generated, recover the min sdk settings, it also works and builds project well then.