2015-09-29 37 views
11

Gần đây tôi đã chuyển sang Android Studio từ Eclipse và tốt hơn cho hầu hết các phần.Android Studio xuất bản thư viện cục bộ

Nhưng bây giờ tôi đang ở thời điểm muốn tạo thư viện để được sử dụng lại sau này. Tôi biết về các mô-đun, nhưng không muốn sử dụng chúng, vì nó có vẻ sao chép một bản sao trong mỗi dự án (tôi muốn có một tham chiếu đến một lib như trong Eclipse).

Vì vậy, tôi đã chuyển sự chú ý của tôi sang giải pháp Maven/Gradle. Lý tưởng nhất là tôi muốn để có thể xuất khẩu lib của tôi để repo địa phương và/hoặc repo maven, và tham khảo nó thông qua đó thông qua gradle. Tôi đã tìm kiếm khá lâu rồi, và mỗi câu trả lời đều khác nhau, và không ai trong số họ làm việc cho tôi. This là gần nhất tôi đã tìm thấy những gì tôi đang tìm kiếm, nhưng có một lỗi trong việc tạo javadoc.

Các trang web này (linklink) yêu cầu tài khoản Bintray hoặc Sonatype xuất bản các thư viện trên toàn cầu. Xuất bản thư viện là một mục tiêu cuối cùng đối với tôi vì vậy tôi muốn giữ tùy chọn đó mở nếu có thể, nhưng bây giờ tôi chỉ muốn libs của tôi là riêng tư.

Sẽ rất tuyệt nếu có một plugin mà tôi có thể chỉ định một repo maven để xuất, nhưng tôi chưa tìm thấy bất kỳ thứ gì có vẻ đầy hứa hẹn.

Vì vậy, câu hỏi của tôi là: Có cách "đơn giản" được đề xuất để xuất thư viện trong Android Studio mà tôi có thể tham khảo sau đó thông qua Gradle không?

Điểm thưởng: Tôi có thể làm xáo trộn thư viện với người bảo vệ khi được xuất bản không? Hiện tại, thiết lập minifyEnabled=true trên kết quả lib của tôi trong tệp .aar không được tạo khi xây dựng.

+0

Bạn nhận được "Thực thi không thành công cho công việc": app: compileReleaseJavaWithJavac '. > Không thể tìm thấy tools.jar "? – Shine

Trả lời

11

Bạn có thể sử dụng maven-publish plugin để xuất bản các tạo phẩm của mình cho bất kỳ kho lưu trữ nào bạn có quyền truy cập. I am using it combined with Amazon S3. Kho lưu trữ có thể là repo maven cục bộ của bạn (thư mục .m2), Artifactory địa phương, Archiva hoặc bất kỳ máy chủ lưu trữ maven nào khác hoặc một giải pháp lưu trữ. S3 hoạt động tốt và tôi chắc chắn có các Artifactories được lưu trữ trên đó.

Nếu bạn đang sử dụng kho lưu trữ bên ngoài, hãy thêm nó vào phần kho lưu trữ, nhưng chỉ sử dụng plugin sẽ cung cấp cho bạn lựa chọn xuất bản cho maven cục bộ. Tác vụ gradle được gọi là publishToMavenLocal. Bạn cần xác định ấn phẩm của mình. Ấn phẩm chỉ đơn giản là một tập hợp các tạo phẩm được tạo bởi bản dựng của bạn, trong trường hợp của bạn, nó có thể là một cái lọ, nhưng nó có thể là bất cứ thứ gì. Ví dụ ngắn làm thế nào để tôi sử dụng nó với S3.

apply plugin: 'maven' 
apply plugin: 'java' 
apply plugin: 'maven-publish' 

repositories { 
    maven { 
     name "s3Repo" 
     url "your S3 URL" 
     credentials(AwsCredentials) { 
      accessKey awsAccessKey 
      secretKey awsSecretKey 
     } 
    } 
    maven { 
     ... any other repo here 
    } 
} 

publishing { 
    publications { 
     maven(MavenPublication) { 
      artifactId 'artifact that you want' 
      from components.java 
      artifact distZip { 
       ... example artifact created from zip distribution 
      } 
     } 
    } 
    repositories { 
     add "s3Repo" 
    } 
} 

Các xuất bản -> kho -> thêm là nơi mà bạn chỉ định tất cả các hợp đồng mua nơi bạn muốn tải lên tài liệu lưu trữ của bạn.

Nếu bạn muốn sử dụng thư viện từ maven địa phương của bạn, chỉ cần thêm:

repositories { 
... 
    mavenLocal() 
... 
} 

Và sau đó tham khảo lib của bạn như với bất kỳ phụ thuộc khác với id nhóm, id tạo tác và phiên bản.


Theo như tôi biết, thư viện bị xáo trộn giống như tên không bị làm phiền, chỉ với tên đã thay đổi của số nhận dạng. Nếu yêu cầu là để xuất bản một thư viện obfuscated, đó sẽ là tốt. Chỉ cần không làm xáo trộn các giao diện API và các lớp (các điểm vào). Nếu bạn xuất bản thư viện không bị xáo trộn, tôi không chắc liệu nó có bị làm phiền trong kho lưu trữ cuối cùng không.

Các vấn đề liên quan