2013-08-13 55 views
13

Tôi đang cố gắng xây dựng một dự án Android (được thừa kế). Tôi đang sử dụng Ant & command line tools (và IDEA).Làm thế nào để xác định phụ thuộc appcompat v7 một cách chính xác?

Trong styles.xml, có tài liệu tham khảo mà không thể được giải quyết như:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light"> 

Đây là lỗi ban đầu Tôi chạy vào:

[...]/res/values/styles.xml:8: error: Error retrieving parent for item: 
No resource found that matches the given name '@style/Theme.AppCompat.Light'. 

sau đó tôi nhận thấy rằng project.properties có appcompat này tham chiếu bị hỏng trên máy (OS X) của tôi:

target=android-18 
android.library.reference.1=../../../../adt-bundle-linux-x86_64/sdk/extras/android/support/v7/appcompat 

Tôi đã cố gắng khắc phục điều đó bằng cách thực hiện tham chiếu tương đối với ${sdk.dir}:

android.library.reference.1=${sdk.dir}/extras/android/support/v7/appcompat 

Vì vậy, bây giờ đường dẫn phải chính xác. Nhưng bây giờ khi tôi chạy ant debug:

BUILD FAILED 
/opt/android-sdk-macosx/tools/ant/build.xml:573: 
    /opt/android-sdk-macosx/extras/android/support/v7/appcompat resolve to a 
    path with no project.properties file for project /Users/joka/devel/project/ 

Vì vậy, có ý tưởng nào không? Cách đơn giản nhất để xây dựng dự án này là gì?

(Xin lưu ý rằng lời khuyên Ecplise cụ thể sẽ không có ích cho tôi.)

Sửa: Quá trình cài đặt Android SDK trông như thế này:

enter image description here

+1

Bạn có gói hỗ trợ trong '/ opt/android-sdk-macosx/extras/android/hỗ trợ/'? – Rajesh

+0

@Rajesh: Vâng, tôi có. Và cụ thể hơn là '/ opt/android-sdk-macosx/extras/android/support/v7/appcompat /' dường như được cài đặt tốt. – Jonik

Trả lời

6

Tôi chạy vào cùng một vấn đề, vì vậy tôi cố gắng sử dụng một đường dẫn tương đối và điều đó đã khắc phục được sự cố cho tôi. Có vẻ như chỉ các đường dẫn tương đối hoạt động với android.library.reference. Tôi đã thực hiện tìm kiếm nhanh để xác minh điều này và đã xem qua số this stackoverflow link cho biết rằng đường dẫn tuyệt đối sẽ hoạt động với android.library.reference trên Windows, chứ không phải trên Unix hoặc Mac.

Hòa bình.

+0

Ah, thật vậy. Tôi đã làm việc với 'android.library.reference.1 = ../../../../../../../opt/android-sdk-macosx/extras/android/support/v7/appcompat' Điều này cũng hoạt động trong 'local.properties', mà tôi nghĩ là một nơi tốt hơn vì cùng một đường dẫn sẽ không hoạt động cho tất cả các nhà phát triển. – Jonik

+9

(Ngoài ra, để xây dựng Ant hoạt động, tôi cần tạo [build.xml] (http://stackoverflow.com/a/15718940/56285) cho dự án appcompat, sử dụng '/ opt/android-sdk-macosx/tools/android update project -p/opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat'.) – Jonik

+0

Tôi đặt một liên kết tượng trưng trong thư mục dự án của tôi 'root => /' và sau đó Tôi có thể có đường dẫn tuyệt đối là đường dẫn tương đối :) – singpolyma

0

con đường của bạn dường như sai (bạn đang thiếu phần 'khả năng tương thích'). Thư viện v7-appcompat là

{sdkpath}/extras/android/compatibility/v7/appcompat 

cho tôi (Công cụ SDK phiên bản 22.0.5 trên Max OS X 10.7.5)

+1

Hmm, đối với tôi, '{sdkpath}/extras/android' chỉ chứa các thư mục con' support' và 'm2repository'. (Và '{sdkpath}/extras/android/support/v7/appcompat' có vẻ là chính xác những gì tôi cần.) Nếu tôi thiếu một số phần của SDK, tôi nên cài đặt nó như thế nào? Tôi cũng đang sử dụng Công cụ SDK Android 22.0.5. – Jonik

+0

Bạn đã cài đặt phiên bản hiện tại của thư viện hỗ trợ chưa? (Chúng tôi đang ở phiên bản 18 tại thời điểm nhận xét này) Bạn có thể kiểm tra bằng cách chạy GUI của trình quản lý Cập nhật SDK (thực hiện chương trình 'android' trong thư mục con của công cụ.) Thư viện hỗ trợ dành cho tôi hầu như ở cuối danh sách . – Patrick

+0

Vâng, [theo Trình quản lý SDK Android] (http://i.stack.imgur.com/adUuX.png) Tôi có Thư viện hỗ trợ Android, đã cài đặt phiên bản 18. – Jonik

9

As Jay indicated, chỉ tương đối đường dẫn mới hoạt động trên Unix/Mac.

Đối với Ant xây dựng để làm việc, tôi cũng cần thiết để generate build.xmlcho dự án appcompat, sử dụng lệnh android update project -p <dir>, trong trường hợp của tôi:

/opt/android-sdk-macosx/tools/android update project 
    -p /opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat 

Các cấu hình chính xác đối với tôi là:

android.library.reference.1=../../../../../../../opt/android-sdk-macosx/extras/‌​android/support/v7/appcompat

(Điều này cũng hoạt động trong local.properties, mà tôi nghĩ là một nơi tốt hơn vì cùng một đường dẫn sẽ không hoạt động cho tất cả các nhà phát triển.)


Tôi chỉ quảng cáo số comment của mình từ 6 tháng trước vào câu trả lời như một người được đề xuất.

Nhân tiện, giờ đây tôi thực sự biết điều gì đó về sự phát triển của Android, tôi muốn thúc giục bất kỳ ai có cơ hội bỏ qua Ant và xem xét new Gradle-based build system hoàn toàn ngọt ngào trong nhà tù. Nó thân thiện với CI và giúp dễ dàng tự động hóa những thứ hữu ích (như sử dụng tên gói và biểu tượng ứng dụng khác nhau cho các kiểu xây dựng khác nhau). Stack Overflow will help khi bạn gặp sự cố.

Sử dụng các thư viện hỗ trợ với Gradle, bạn sẽ bỏ qua tất cả những rắc rối trên và simply do:

dependencies { 
    compile "com.android.support:appcompat-v7:18.0.+" 
} 
+0

Tôi cũng cần thay đổi target = android-19 thành target = android-21 trong /opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat/project.properties như được mô tả bởi http://stackoverflow.com/questions/26457096/appcompat-v7-r21-returning-error-in-values-xml –