làm cách nào tôi có thể thêm tệp hỗ trợ vào studio Android (từ ví dụ thanh toán trong ứng dụng)


136

Tôi hiện đang di chuyển một ứng dụng Eclipse sang Android Studio. Ứng dụng này đã được sử dụng trong thanh toán ứng dụng.

Vấn đề chính của tôi là biên dịch dự án và tệp hỗ trợ (tôi đoán tất cả các bạn đều sử dụng tệp này )

Tôi nhận được thông báo lỗi này:

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

Vì vậy, theo một số hướng dẫn, tôi chuyển tệp này từ com.mypackage.billing sang src / main / Aidl (xem tài liệu tham khảo này )

Nhưng ngay sau khi tôi làm điều đó, tôi nhận được tin nhắn này:

Lớp: Thực thi không thành công cho nhiệm vụ ': xxxxxxxxxxx: compileDebugAidl'.

Không thể chạy lệnh: (...) C: \ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ Aidl \ IInAppBillingService.aidl: 45 giao diện IInAppBillingService nên được khai báo trong một tệp có tên com \ xxxxxxx .aidl.

Thông báo rõ ràng là một mâu thuẫn với bài đăng từ trang lỗi Google tôi đã liên kết ở trên.

Bất cứ ai cũng có thể làm cho tập tin viện trợ này hoạt động và có thể giúp tôi?

nhập mô tả hình ảnh ở đây

Chỉ cần thông báo, một số liên kết tôi đã theo dõi:


Câu hỏi là ... không nên là tập tin trợ giúp này /src/main/aidl/com/android/vending/billing?
Selvin

1
Lớp: Thực thi không thành công cho nhiệm vụ ': MyProject: compileDebugAidl'. > Không thể chạy lệnh: 45 giao diện IInAppBillingService nên được khai báo trong tệp có tên com \ android \ vending \ billing \ IInAppBillingService.aidl.
Waza_Be

1
một cái gì đó cho tôi biết bạn vẫn không đặt nó vào thư mục mà Selvin và tôi đang nói ...?
Sam Dozor

vừa thêm một ảnh chụp màn hình mới, tôi nghĩ rằng tôi đã đặt nó vào thư mục mà bạn đã nói với tôi ..
Waza_Be

selvin.pl/TrivialDriveProject.Gradle.zip (thay đổi thư mục sdk trong local.properies) ... gradlew.bat assemblevà nó hoạt động như một bùa mê ... bạn có chắc rằng thư mục đó là / src / main / Aidl / com / android / vending / billing không /src/main/aidl/com.android.veinating.billing? NHƯ 0.2.1? Lớp 0,5. +?
Selvin

Câu trả lời:


162

Giống như thông báo lỗi nói, bạn cần đặt IInAppBillingService.aidlđúng thư mục được quy định bởi gói của nó (com.android.veinating.billing).

Trong src/main/aidl/thư mục bạn đã có, hãy đặt .aidltệp vào com/android/vending/billing/.


5
Khi tôi làm điều này, tôi nhận được: Gradle: error: không thể tìm thấy lớp biểu tượng IInAppBillingService
Waza_Be

9
vì vậy, đó là trong / src / main / Aidl / com / android / vending / billing? Bạn đang sử dụng gradle để xây dựng? Nếu vậy, nhấn nút phân lớp nhỏ ở góc trên bên phải của Android Studio để có cấu hình tải lại lớp hoặc đóng / mở Android Studio.
Sam Dozor

80
Chỉ cần làm rõ. Tạo một thư mục trợ giúp theo src / main /. Sau đó thêm gói mới com.android.veinating.billing. Sau đó sao chép tập tin Aidl vào gói mới. Xem code.google.com/p/android/issues/detail?id=56755
Kalel Wade

2
@Kalel Wade Đây là giải pháp cho tôi, bạn nên thêm nó làm câu trả lời.
eski

3
Nếu bạn không có src / main, hãy tạo thư mục Aidl ở bất cứ đâu và chỉ định trong build.gradle: android {sourceSets {main {Aidl {srcDirs 'fact_path ..'
aleb

221

Thêm điều này như một câu trả lời vì nó dường như giúp đỡ khá nhiều người.

  1. Tạo một thư mục mới có tên 'Aidl' trong 'src / main /'. Nó sẽ trông giống như ' src / main / Aidl '.
  2. Thêm một tên gói mới ' com.android.veinating.billing ' vào thư mục ' src / main / Aidl '
  3. Xác định vị trí sdk của bạn và đi đến "sdk \ ngoại hạng \ google \ play_billing". Vị trí mặc định cho sdk là "C: \ Program Files (x86) \ Android \ android-sdk". Nếu bạn tùy chỉnh thay đổi nó, thì bạn sẽ phải tìm ra vị trí thông qua trình quản lý sdk.
  4. Sao chép 'IInAppBillingService.aidl' vào gói được tạo ở trên. Cuối cùng, nó sẽ trông giống như hình ảnh dưới đây.

Ảnh chụp màn hình kết quả

  1. Xây dựng lại dự án và nó sẽ là tốt để đi.

Lưu ý: Đảm bảo bạn bao gồm nhập cần thiết nếu tham chiếu của bạn không hoạt động

import com.android.vending.billing.IInAppBillingService;

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

Chỉnh sửa từ bình luận

Sau khi tôi làm điều này, các tham chiếu đến IInAppBillingService trong mã của tôi vẫn được tô sáng là lỗi, nhưng sau khi xây dựng lại ứng dụng, lớp đã được nhận ra


1
Chỉ cần rõ ràng: đọc kỹ điều này! Tôi đã không ... nhấn mạnh một lần nữa: Đó là một bổ sung tốt ... PUT THE com.android.veinating.billing IN thư mục 'main / Aidl' MỚI!
Cậu bé

5
Sau khi tôi làm điều này, các tham chiếu đến IInAppBillingService trong mã của tôi vẫn được tô sáng là lỗi, nhưng sau khi xây dựng lại ứng dụng, lớp đã được nhận ra.
arlomedia

Điều này đã làm việc, nhưng tại sao điều này không hoàn toàn tự động, khi bạn chọn thêm mô-đun?
nhà phát triển Android

Cảm ơn các mẹo xây dựng lại dự án. Ngoài ra, thư mục và gói có thể được tạo trong một hương vị, nó không phải là chính. (Ví dụ: nếu bạn chỉ thực hiện thanh toán ứng dụng theo một hương vị của ứng dụng của bạn)
Mike Fosker

4
Dành 20 phút để giải quyết vấn đề này cho đến khi tôi đi đến câu trả lời của bạn. Sau đó, tôi đã cố gắng nâng cấp nó để nhận được lỗi "Bạn đã bỏ phiếu lần cuối cho câu trả lời này ..." Tôi đoán một số người không bao giờ học :)
beetree

10

Phần còn lại của bài viết ở đây không hoạt động với tôi cho đến khi tôi tạo một thư mục mới như hiển thị ở đây.

nhập mô tả hình ảnh ở đây


9
  • Tạo thư mục mới dưới src/maintên gọiaidl
  • Nhấp chuột phải vào thư mục aidl, chọnnew->add package
  • Nhập tên của gói com.android.vending.billing

  • Sao chép IInAppBillingService.aidltừ thư Android/Sdk/extras/google/play_billingmục vào thư mụcApp_name/app/src/main/aidl/com/android/vending/billing

  • Bây giờ hãy tiếp tục với mã hóa hóa đơn InApp và trong khi xác định các dịch vụ liên quan đến InApp, bạn sẽ gặp lỗi can not resolve symbol IInAppBillingXXXXXX
  • Bây giờ goto đến Buildtừ menu studio android, bấm vào Rebuild Project. Điều này sẽ tạo IInAppBillingService.javatập tin bên trong App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Điều này sẽ giải quyết vấn đề.

@MOHSENNAVABI Không có vấn đề gì :-)
Praveena

Sau khi sao chép tệp "IInAppBillingService.aidl", có bắt buộc phải thay đổi bất kỳ dòng nào của tệp này không? Tôi đã thấy một số lưu ý yêu cầu thay thế tên gói vì nó đến từ một mẫu để tránh lỗi "Aidl.exe 'kết thúc với giá trị thoát không bằng 1". Các hướng dẫn cụ thể để làm điều này là gì?
Pablo Alfonso

7

Thêm mã này vào build.gradle

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

Xây dựng lại và nhập viện trợ lớp


2

Các câu trả lời trên tập trung vào vị trí tệp, nhưng có vẻ như bạn đã đặt đúng. Tôi đã gặp vấn đề tương tự trong Android Studio, nhưng không có câu trả lời nào được liệt kê đã giải quyết nó và tôi đập đầu vào nó trong một giờ. Cuối cùng, tôi nhận ra rằng tôi đang thiếu một nhập khẩu rõ ràng:

 import com.android.vending.billing.IInAppBillingService;

Khi tôi thêm rằng nó đã giải quyết thông báo lỗi này.

Việc nhập này không được đề cập trong bất kỳ tài liệu Google Billing nào hoặc được bao gồm trong bất kỳ ví dụ mã nào tôi tìm thấy. Mặc dù có thể rõ ràng đối với các nhà phát triển Java có kinh nghiệm, những người mới bắt đầu chỉ cố gắng tìm hiểu dự án đầu tiên của họ có thể cần nó được chỉ ra rõ ràng.


1

Chúng ta cần thêm

  1. tạo thư mục - src / main / Aidl / packagename và đặt tập tin Aidl vào đây.

  2. Trong tệp hỗ trợ - đề cập đến tên gói. gói packagename

Bây giờ dọn dẹp dự án, xây dựng lại dự án - Chúng tôi có thể tệp java tương ứng cho các trợ giúp được tạo trong ứng dụng \ build \ created \ source \ Aidl \ debug \ packagename \ youstonl.java


1

Tôi biết nó nghe có vẻ dễ dàng, nhưng tôi sao chép dán từ thư mục mẫu của google

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

viện trợ / com / android / bán hàng tự động / thanh toán

sao chép vào trợ giúp dự án (Tôi đã đặt chế độ xem dự án trong Android Studio)

và tiếp theo tôi dọn dẹp và xây dựng lại dự án và nó tìm thấy một tài liệu tham khảo.


0

Tôi đã thử mọi giải pháp, nhưng vấn đề là Android Studio đã biên dịch, với bất kỳ lý do rõ ràng nào, trong một kiểu xây dựng khác của mô-đun chứa các gói AIDL so với cài đặt được chỉ định. Từ gỡ lỗi đến phát hành , vì vậy các mô-đun khác không thể thấy pID AIDL. Chuyển từ gỡ lỗi sang phát hành và quay trở lại, giải quyết vấn đề của tôi.


0

khởi động lại Android Studio làm việc cho tôi

một điều ngớ ngẩn thứ hai làm tôi mất một lúc. Tôi đã bỏ mã trên Android Studio để cho phép anh ta tạo tệp, nhưng anh ta đã tạo .java (như mong đợi) thay vì .aidl Jiji, ngu ngốc đối với tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.