2015-12-23 25 views
6

Tôi đã xem các câu hỏi (Android Studio combine 2 .aar into one và những người khác) được đăng bởi nhiều nhà phát triển khác nhau nhưng tôi chưa thấy phản hồi dứt khoát cho phép tôi tạo AAR bao gồm 1 hoặc nhiều AAR hoặc JAR. có thể làm với các JAR vì tôi không cần chia sẻ bất kỳ tài nguyên nào, chỉ các lớp). Đây là app.gradle cho dự án thư viện của tôi:Tạo AAR với nhiều AAR/JAR

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.1.0" 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 21 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
    compile 'com.google.code.gson:gson:2.1' 
    compile ('libs/eventbus.jar') 
    compile project(':core-release') 
    compile project(':midware-release') 
} 

Một lần nữa, ứng dụng này là một dự án thư viện mà cần hai dự án thư viện khác ('lõi phát hành', 'midware phát hành') và trong khi tôi đã có thể để tạo ra một tệp AAR mà tôi có thể sử dụng trong ứng dụng của mình, ứng dụng không thể tìm thấy các lớp dự án thư viện phụ thuộc như vậy, tôi phải thêm hai AAR của dự án thư viện vào ứng dụng của mình.

Đây là dự án ứng dụng app.gradle (mà không cần thêm các lọ bằng tay) mà không thể tìm thấy lớp các dự án phụ thuộc:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "com.app.sample" 
     minSdkVersion 19 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
    compile files('libs/eventbus.jar') 
    compile project(':sdk3-debug') 
} 

Tôi không nghĩ rằng tập tin AAR thư viện dự án được kéo trong các dự án phụ thuộc (AAR hoặc JAR) và do đó ứng dụng không thể tìm thấy các lớp.

Tôi đã đọc về phụ thuộc transitive, nhưng tôi không thể tìm thấy triển khai ví dụ có thể giúp ích cho trường hợp của tôi.

Trả lời

1

này nên khắc phục sự cố:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
    compile files('libs/eventbus.jar') 
    compile project(':sdk3-debug') { transitive = true } 
} 

Bao gồm cờ bắc cầu tại true.

+1

Tôi đã thử nhưng tôi không thể vượt qua được 'Không có thuộc tính: chuyển tiếp cho lớp: org.gradle.api.internal.project.DefaultProject_Decorated' lỗi. Thậm chí chuyển sang trình bao bọc gradle mặc định trong Build Tools -> Gradle settings từ phân phối gradle cục bộ không giúp được –

+2

Bạn có thể thử: biên dịch (project (': sdk3-debug')) {transitive = true} –

+0

hạnh phúc bây giờ. Tuy nhiên, dự án ứng dụng của tôi không thể tìm thấy các lớp trong dự án thư viện (phần mềm trung gian) nằm trong tệp AAR. Các lớp học trực tiếp trong tệp AAR có thể truy cập được. Như tôi đã đề cập, tệp AAR của tôi có hai dự án phụ thuộc (lõi và phần mềm trung gian). –

1

tôi đã có thể giải quyết vấn đề này bằng cách làm theo Stan Kurdziel 's gợi ý: stackoverflow.com/questions/30052058/multiple-aar-files và đây là bước tôi đã đi đến một giải pháp:

  • Tôi tạo ra một AAR mà tôi công bố vào kho maven địa phương
  • Bây giờ AAR này có thể truy cập trong dự án ứng dụng
  • AAR này cũng có tham chiếu đến các lớp trong thư viện lõi và phần mềm trung gian. Tôi đi theo Stan Kurdziel của cách tiếp cận # 2:

thủ thêm sự phụ thuộc vào Dự án Thư viện 2 đến Dự án Ứng dụng - vì vậy mà ứng dụng của bạn có một dòng phụ thuộc cho cả thư viện. Tùy thuộc vào tình hình cụ thể của bạn, điều này có thể hoặc không phải là một giải pháp khả thi.

Hy vọng điều này sẽ giúp những người khác có thể gặp sự cố tương tự.

1

Tôi chưa thấy phản hồi dứt khoát cho phép tôi tạo AAR bao gồm 1 hoặc nhiều AAR hoặc JAR.

Có, tôi nghĩ vì chủ đề này không giới hạn ở AAR hoặc JAR, nhưng cách Maven quản lý sự phụ thuộc.

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

trong khi tôi đã có thể tạo ra một tập tin AAR mà tôi có thể sử dụng trong các ứng dụng của tôi, việc áp dụng đã không thể tìm thấy lớp các dự án thư viện phụ thuộc như vậy, tôi đã có thêm hai dự án thư viện 'AAR vào ứng dụng của tôi.

Trách nhiệm AAR của bạn không bao gồm phụ thuộc, tệp POM của bạn nên bao gồm thông tin về phụ thuộc.

https://maven.apache.org/pom.html

Tôi không nghĩ rằng tập tin AAR thư viện dự án được kéo vào các dự án phụ thuộc (AAR or JAR) và do đó việc áp dụng là không thể tìm thấy các lớp học.

Đúng, bạn vẫn cần phải bao gồm phụ thuộc thư viện trong Ứng dụng của mình.

Tôi giả sử bạn muốn thư viện của mình có thể được Ứng dụng sử dụng, mà không chỉ định phụ thuộc thư viện của bạn core-releasemidware-release. Tôi đã thực hiện một lời giải thích đầy đủ ở đây android studio generate aar with dependency nhưng đây là những gì bạn cần làm:

  1. Tải lên core-releasemidware-release để kho Maven bạn
  2. Tạo một file POM cho thư viện của bạn bao gồm phụ thuộc của bạn

    <project> 
        <modelVersion>4.0.0</modelVersion> 
        <parent>...</parent> 
        <artifactId>okhttp</artifactId> 
        <name>OkHttp</name> 
        <dependencies> 
         <dependency> 
         <groupId>com.example</groupId> 
         <artifactId>core-release</artifactId> 
         </dependency> 
         <dependency> 
         <groupId>com.example</groupId> 
         <artifactId>midware-release</artifactId> 
         </dependency> 
        </dependencies> 
        <build>...</build> 
    </project> 
    
  3. Xuất bản AAR của bạn với tệp POM đó

    mvn deploy:deploy-file \ 
         -DgroupId=com.example \ 
         -DartifactId=your-library \ 
         -Dversion=1.0.1 \ 
         -Dpackaging=aar \ 
         -Dfile=your-library.aar \ 
         -DpomFile=path-to-your-pom.xml \ 
         -DgeneratePom=true \ 
         -DupdateReleaseInfo=true \ 
         -Durl="https://mavenUserName:[email protected]/repository/maven-releases/" 
    

Sau đó, Ứng dụng của bạn có thể sử dụng thư viện của bạn. Gradle sẽ tự động tải xuống các phụ thuộc chuyển tiếp thư viện của bạn.

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