ฉันจะเพิ่มไฟล์ aidl ลงในสตูดิโอ Android ได้อย่างไร (จากตัวอย่างการเรียกเก็บเงินในแอป)


136

ขณะนี้ฉันกำลังโอนย้ายแอป Eclipse ไปยัง Android Studio แอปนี้ใช้การเรียกเก็บเงินในแอป

ปัญหาหลักของฉันคือการรวบรวมโครงการและไฟล์ช่วยเหลือ (ฉันคิดว่าคุณทุกคนใช้ไฟล์นี้ )

ฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

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 อินเทอร์เฟซที่เรียกว่า com \ xxxxxxxx \ billing \ IInAppBillingService .aidl

ข้อความนี้ขัดแย้งกับโพสต์จากหน้าบั๊กของ Google ที่ฉันลิงค์ด้านบนอย่างชัดเจน

ใครก็ตามที่สามารถทำให้ไฟล์ helpl นี้ทำงานและสามารถช่วยฉันได้

ป้อนคำอธิบายรูปภาพที่นี่

เพียงแจ้งให้ทราบบางลิงค์ที่ฉันติดตาม:


คำถามคือ ... ไม่ควรเป็นไฟล์ helpl นี้/src/main/aidl/com/android/vending/billing?
Selvin

1
Gradle: การดำเนินการล้มเหลวสำหรับงาน ': MyProject: compileDebugAidl' > ล้มเหลวในการเรียกใช้คำสั่ง: 45 อินเตอร์เฟส IInAppBillingService ควรประกาศในไฟล์ชื่อ com \ android \ vending \ billing \ IInAppBillingService.aidl
Waza_Be

1
มีบางอย่างบอกฉันว่าคุณยังไม่ได้ใส่ในโฟลเดอร์ที่ Selvin และฉันกำลังพูด ...
Sam Dozor

เพิ่งเพิ่มภาพหน้าจอใหม่ฉันคิดว่าฉันใส่ไว้ในโฟลเดอร์ที่คุณบอกฉัน ..
Waza_Be

selvin.pl/TrivialDriveProject.Gradle.zip (เปลี่ยน sdk dir ใน local.properties) ... gradlew.bat assembleและมันทำงานได้อย่างมีเสน่ห์ ... คุณแน่ใจหรือว่าโฟลเดอร์นั้นเป็น / src / main / aidl / com / android / vending / billing ไม่ /src/main/aidl/com.android.vending.billing? AS 0.2.1? ระดับ 0.5 หรือมากกว่า
Selvin

คำตอบ:


162

เช่นเดียวกับข้อความแสดงข้อผิดพลาดที่บอกว่าคุณต้องใส่IInAppBillingService.aidlไดเรกทอรีที่ถูกต้องซึ่งเป็นแพคเกจ (com.android.vending.billing)

ภายในsrc/main/aidl/โฟลเดอร์ที่คุณมีอยู่แล้วใส่แฟ้มใน.aidlcom/android/vending/billing/


5
เมื่อฉันทำสิ่งนี้ฉันจะได้รับ: Gradle: ข้อผิดพลาด: ไม่พบคลาสสัญลักษณ์ IInAppBillingService
Waza_Be

9
ดังนั้นใน / src / main / aidl / com / android / vending / billing คุณใช้ gradle เพื่อสร้าง? หากเป็นเช่นนั้นให้กดปุ่ม gradle เล็ก ๆ ที่ด้านบนขวาของ Android Studio เพื่อกำหนดค่าการโหลดแบบ gradle หรือปิด / เปิด Android Studio
Sam Dozor

80
เพียงชี้แจง สร้างไดเร็กทอรี aidl ภายใต้ src / main / จากนั้นเพิ่มแพ็คเกจใหม่ com.android.vending.billing จากนั้นคัดลอกไฟล์ aidl ไปยังแพ็คเกจใหม่ ดูcode.google.com/p/android/issues/detail?id=56755
Kalel Wade

2
@ Kalel Wade นี่เป็นทางออกสำหรับฉันคุณควรเพิ่มมันเป็นคำตอบ
eski

3
หากคุณไม่มี src / main ให้สร้างไดเร็กทอรี aidl ที่ใดก็ได้และระบุใน build.gradle: android {sourceSets {main {aidl {srcDirs 'actual_path .. '
aleb

221

การเพิ่มสิ่งนี้เป็นคำตอบเนื่องจากดูเหมือนจะช่วยได้ไม่กี่คน

  1. สร้างไดเรกทอรีใหม่ชื่อ 'aidl' ภายใต้ 'src / main /' ควรมีลักษณะเช่น ' 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

สิ่งนี้ใช้ได้ แต่ทำไมทั้งหมดนี้ไม่อัตโนมัติเมื่อคุณเลือกที่จะเพิ่มโมดูล?
นักพัฒนา android

ขอบคุณสำหรับเคล็ดลับการสร้างโครงการใหม่ นอกจากนี้ยังสามารถสร้างโฟลเดอร์และแพ็คเกจในรสชาติได้โดยไม่จำเป็นต้องอยู่ในหลัก (ตัวอย่างเช่นคุณทำการเรียกเก็บเงินแอพในแอพเดียวเท่านั้น)
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

หลังจากคัดลอกไฟล์ "IInAppBillingService.aidl" จำเป็นต้องเปลี่ยนบรรทัดของไฟล์นี้หรือไม่? ฉันเคยเห็นบันทึกย่อบางส่วนที่ขอให้เปลี่ยนชื่อแพคเกจเนื่องจากมาจากตัวอย่างเพื่อหลีกเลี่ยงข้อผิดพลาด "aidl.exe" เสร็จสิ้นด้วยค่าทางออกที่ไม่เป็นศูนย์ 1 " อะไรคือคำแนะนำเฉพาะในการทำสิ่งนี้?
Pablo Alfonso


2

คำตอบข้างต้นเน้นที่ตำแหน่งไฟล์ แต่ดูเหมือนว่าคุณได้ตั้งค่าไว้อย่างถูกต้องแล้ว ฉันประสบปัญหาเดียวกันนี้ใน Android Studio แต่ไม่มีคำตอบในรายการที่แก้ไขได้และฉันกระแทกหัวของฉันกับมันเป็นเวลาหนึ่งชั่วโมง ในที่สุดฉันก็ตระหนักว่าฉันขาดการนำเข้าที่เห็นได้ชัด:

 import com.android.vending.billing.IInAppBillingService;

เมื่อฉันเพิ่มว่าจะแก้ไขข้อผิดพลาดนี้

การนำเข้านี้ไม่ได้กล่าวถึงในเอกสารการเรียกเก็บเงินของ Google หรือรวมอยู่ในตัวอย่างรหัสใด ๆ ที่ฉันพบ แม้ว่าผู้พัฒนา Java ที่มีประสบการณ์อาจจะเห็นได้ชัด แต่ผู้เริ่มต้นเพิ่งพยายามเรียนรู้โครงการแรกของพวกเขาอาจต้องการชี้ชัด


1

เราจำเป็นต้องเพิ่ม

  1. สร้างโฟลเดอร์ - src / main / aidl / packagename และวางไฟล์ aidl ภายใต้สิ่งนี้

  2. ในไฟล์ aidl - พูดถึงชื่อแพ็กเกจ แพ็คเกจชื่อแพ็คเกจ

ตอนนี้ทำความสะอาดโครงการสร้างโครงการ - เราสามารถไฟล์ java ที่สอดคล้องกันสำหรับ aidl ที่สร้างขึ้นในแอพ \ build \ created \ source \ aidl \ debug \ packagename \ youraidl.java


1

ฉันรู้ว่ามันฟังดูง่ายมาก แต่ฉันคัดลอกแปะจาก google sample folder ทั้งหมด

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

aidl / co.th / Android / จำหน่ายสินค้า / การเรียกเก็บเงิน

คัดลอกไปยังโครงการ aidl (ฉันได้ตั้งมุมมองโครงการใน Android Studio)

และต่อไปฉันทำความสะอาดและสร้างโครงการใหม่และพบการอ้างอิง


0

ฉันได้ลองใช้วิธีแก้ปัญหาทั้งหมดแล้ว แต่ปัญหาคือว่า Android Studio ได้รวบรวมด้วยเหตุผลที่ชัดเจนในรูปแบบบิลด์ต่าง ๆ ของโมดูลที่มีแพ็คเกจ AIDL มากกว่าที่ระบุไว้ในการตั้งค่า ตั้งแต่การดีบั๊กจนถึงรีลีสดังนั้นโมดูลอื่นไม่สามารถมองเห็น AIDL pkg การสลับจากการดีบั๊กเป็นรีลีสและย้อนกลับแก้ไขปัญหาของฉัน


0

การรีสตาร์ท Android Studio นั้นใช้งานได้สำหรับฉัน

สิ่งที่สองโง่ที่ใช้เวลาสักครู่ ฉันลบรหัสใน Android Studio เพื่ออนุญาตให้เขาสร้างไฟล์ แต่เขาสร้าง. java (ตามที่คาดไว้) แทน. aaidl Jiji โง่ของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.