IT-Swarm.Net

Πώς να συμπεριλάβετε χειροκίνητα το εξωτερικό πακέτο aar χρησιμοποιώντας το νέο Gradle Android Build System

Έχω πειραματιστεί με το νέο build σύστημα Android και έχω έρθει σε ένα μικρό ζήτημα. Έχω συντάξει το δικό μου πακέτο ActionBarSherlock, το οποίο έχω ονομάσει 'actionbarsherlock.aar'. Αυτό που προσπαθώ να κάνω είναι να χρησιμοποιήσω αυτό το aar για να φτιάξω το τελικό APK μου. Αν συμπεριλάβω ολόκληρη τη βιβλιοθήκη ActionBarSherlock ως λειτουργική μονάδα βιβλιοθήκης Android στο κύριο έργο μου, χρησιμοποιώντας το πρόγραμμα compile (': actionbarsherlock') μπορώ να οικοδομήσω με επιτυχία χωρίς κανένα πρόβλημα.

Αλλά το πρόβλημά μου είναι ότι θέλω να παράσχω αυτή την εξάρτηση ως ένα πακέτο αρχείων MAN μόνο αν ήμουν JAR, τότε δεν μπορώ να καταλάβω πώς να το συμπεριλάβω σωστά στο έργο μου. Προσπάθησα να χρησιμοποιήσω τη διαμόρφωση της μεταγλώττισης αλλά αυτό δεν φαίνεται να λειτουργεί. Συνεχίζω να μην βρίσκω σύμβολο κατά τη μεταγλώττιση που μου λέει ότι τα classes.jar από το πακέτο aar δεν συμπεριλαμβάνονται στην ταξική πορεία.

Μήπως κάποιος γνωρίζει τη σύνταξη για να συμπεριλάβει χειροκίνητα ένα πακέτο aar ως αρχείο;

build.gradle

buildscript {

 repositories {
     mavenCentral()
  }
  dependencies {
    classpath 'com.Android.tools.build:gradle:0.4'
  }
}
apply plugin: 'Android'

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

Android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

EDIT: Έτσι, η απάντηση είναι ότι δεν υποστηρίζεται αυτή τη στιγμή, εδώ είναι το θέμα αν θέλετε να το παρακολουθήσετε.

EDIT: Επειδή αυτή δεν υποστηρίζεται άμεσα, η καλύτερη εναλλακτική λύση φαίνεται να είναι η προτεινόμενη λύση από το @RanWakshlak

EDIT: Επίσης απλούστερη χρησιμοποιώντας τη σύνταξη που προτείνεται από το @VipulShah

355
Miguel Lavigne

Παρακαλούμε ακολουθήστε τα παρακάτω βήματα για να το λειτουργήσετε (το έχω δοκιμάσει μέχρι το Android Studio 2.2)

Ας πούμε ότι έχετε κρατήσει aar αρχείο στο φάκελο libs. (υποθέστε ότι το όνομα του αρχείου είναι cards.aar)

στη συνέχεια, στην εφαρμογή build.gradle καθορίστε το ακόλουθο και κάντε κλικ στο έργο συγχρονισμού με τα αρχεία Gradle. Ανοίξτε το επίπεδο ανάπτυξης του έργου και προσθέστε το flatDir{dirs 'libs'} όπως παρακάτω

allprojects {
   repositories {
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

και τώρα ανοίξτε το αρχείο εφαρμογής build.grdle και προσθέστε το αρχείο .aar

    dependencies {
       compile(name:'cards', ext:'aar')
}

Αν όλα πάνε καλά θα δείτε ότι η είσοδος της βιβλιοθήκης γίνεται στο build -> exploded-aar

Επίσης, σημειώστε ότι αν εισάγετε ένα αρχείο .aar από άλλο έργο που έχει εξαρτήσεις, θα πρέπει να το συμπεριλάβετε και στο build.gradle.

613
Vipul Shah
  1. Κάντε δεξί κλικ στο έργο σας και επιλέξτε "Ανοίξτε τις ρυθμίσεις μονάδας" .

Open module settings

  1. Κάντε κλικ στο κουμπί "+" στην επάνω αριστερή γωνία του παραθύρου για να προσθέσετε μια νέα ενότητα.

Add new module

  1. Επιλέξτε "Εισαγωγή του πακέτου .JAR ή .AAR" και κάντε κλικ στο "Επόμενο" .

Import AAR

  1. Βρείτε το αρχείο AAR χρησιμοποιώντας το κουμπί Ellipsis "..." δίπλα στο πεδίο "Όνομα αρχείου".

Find AAR file

  1. Κρατήστε την ενότητα της εφαρμογής και επιλέξτε το παράθυρο Εξαρτημάτων για να προσθέσετε τη νέα μονάδα ως εξάρτηση.

Dependencies pane

  1. Χρησιμοποιήστε το κουμπί "+" της οθόνης εξαρτήσεων και επιλέξτε "Εξάρτηση μονάδας" .

Add module dependency

  1. Επιλέξτε τη μονάδα και κάντε κλικ "OK" .

Choose module

222
Oliver Kranz

Μπορείτε να αναφέρετε ένα αρχείο aar από ένα αποθετήριο. Το Maven είναι μια επιλογή, αλλά υπάρχει μια πιο απλή λύση: βάλτε το αρχείο aar στον κατάλογο libs και προσθέστε ένα κατάλογο καταλόγων.

repositories {
  mavenCentral()
  flatDir {
    dirs 'libs'
  }
}

Στη συνέχεια, ανατρέξτε στη βιβλιοθήκη στην ενότητα εξάρτησης:

dependencies {
  compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}

Μπορείτε να ελέγξετε έξω Min'an blog post για περισσότερες πληροφορίες.

101
Ran Wakshlak

Η παρακάτω προσέγγιση λειτουργεί με το πιο πρόσφατο στούντιο Android (> v0.8.x):

  • Αποθηκεύστε το αρχείο aar κάτω από το φάκελο libs της εφαρμογής της εφαρμογής (π.χ.: <project>/<app>/libs/myaar.aar)

  • Προσθέστε τα παρακάτω για να build.gradle του φακέλου λειτουργικής μονάδας "app" (όχι το build.gradle του project root). Σημειώστε το όνομα στη γραμμή σύνταξης, είναι myaar @ aar όχι myaar.aar.

    dependencies {
        compile 'package.name.of.your.aar:myaar@aar'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
    
  • Κάντε κλικ στο Tools -> Android -> Sync Project with Gradle Files

45
ashoke

πριν (προεπιλογή)

implementation fileTree(include: ['*.jar'], dir: 'libs')

απλά προσθέστε '*.aar' σε include array.

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

λειτουργεί καλά στο Android Studio 3.x.

αν θέλετε να αγνοήσετε κάποια βιβλιοθήκη; κάνετε αυτό.

implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')
27
susemi99

Αυτή τη στιγμή η αναφορά ενός τοπικού αρχείου .aar δεν υποστηρίζεται (όπως επιβεβαιώθηκε από τον Xavier Ducrochet)

Τι μπορείτε να κάνετε αντ 'αυτού δημιουργείται ένα τοπικό αποθετήριο Maven (πολύ απλούστερο από αυτό που ακούγεται) και ανατρέξτε στο .aar από εκεί.

Έχω γράψει ένα blogpost που περιγράφει πώς να το δουλέψω εδώ:

http://www.flexlabs.org/2013/06/using-local-aar-Android-library-packages-in-grade-builds

20
Artiom Chilaru

Μόλις κατάφερα!

  1. Αντιγράψτε το αρχείο mylib-0.1.aar στο φάκελο libs /

  2. Προσθέστε αυτές τις γραμμές στο κάτω μέρος της build.gradle (πρέπει να είναι app, όχι project):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
    
  3. Μέχρι εδώ καλά. Εδώ έρχεται το πιο σημαντικό σημείο:

Το Gradle πρέπει να έχει πρόσβαση στο δίκτυο για εξαρτήσεις, εκτός εάν είναι ενεργοποιημένη η λειτουργία εκτός σύνδεσης.

Βεβαιωθείτε ότι έχετε ενεργοποιήσει το εργασία χωρίς σύνδεση μέσω του πλαισίου ελέγχου Project Structures/Gradle

- OR -

Ρυθμίστε τις ρυθμίσεις ρυθμίσεις διακομιστή μεσολάβησης για να αποκτήσετε πρόσβαση στο δίκτυο.

Για να διαμορφώσετε τις ρυθμίσεις του διακομιστή μεσολάβησης, πρέπει να τροποποιήσετε το αρχείο gradle.properties του έργου, διαμορφώνοντας ξεχωριστά το http και το https όπως παρακάτω:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

Ελπίζω ότι αυτό θα λειτουργήσει.

18
Orhun D.

Μπορείτε να προσθέσετε πολλαπλές εξαρτήσεις aar με μερικές μόνο γραμμές κώδικα.

Προσθήκη τοπικού flatDir αποθετηρίου:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

Προσθέστε κάθε aar σε κατάλογο libs σε compile διαμόρφωση εξάρτησης:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}
18
mixel

Δυστυχώς, καμία από τις λύσεις εδώ δεν λειτούργησε για μένα (παίρνω ανεπίλυτες εξαρτήσεις). Αυτό που τελικά λειτούργησε και είναι ο ευκολότερος τρόπος IMHO είναι: Επισημάνετε το όνομα του έργου από το Android Studio, στη συνέχεια File -> New Module -> Import JAR ή AAR Package. Η πίστωση πηγαίνει στη λύση σε αυτό το post

13
Nonos

Είχα και αυτό το πρόβλημα. Αυτή η αναφορά έκδοσης: https://code.google.com/p/Android/issues/detail?id=5586 φαίνεται να υποδηλώνει ότι η απευθείας αναφορά στο αρχείο .AAR δεν υποστηρίζεται.

Ίσως η εναλλακτική λύση για τώρα είναι να ορίσετε τη βιβλιοθήκη actionbarsherlock ως μια βιβλιοθήκη Gradle κάτω από τον γονικό κατάλογο του έργου σας και αναφορά αναλόγως.

Η σύνταξη ορίζεται εδώ http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Referencing--Library

6
user937783

Υπάρχουν 2 τρόποι:

  • Πρώτος τρόπος

1: Ανοίξτε το Android Studio και μεταβείτε στο παράθυρο "Δημιουργία νέας μονάδας" από το File-> New-> New Module ...

enter image description here

2: Επιλέξτε το στοιχείο "Εισαγωγή .JAR/.AAR Package" και κάντε κλικ στο κουμπί επόμενου

3: Προσθέστε την εξάρτηση στο αρχείο build.gradle που ανήκει στο Modul app.

dependencies {
    ...

    implementation project(path: ':your aar lib name')

}

ότι όλα.

  • δεύτερος τρόπος

1 Δημιουργήστε ένα φάκελο στον κατάλογο libs, όπως aars.

2 Τοποθετήστε το aar lib στον φάκελο aars.

3 Προσθέστε το απόσπασμα κώδικα

repositories { flatDir { dirs 'libs/aars' } }

στο αρχείο build.gradle σας ανήκουν στην ενότητα εφαρμογών.

4 Προσθέστε την εξάρτηση στο αρχείο build.gradle που ανήκει στο Modul app.

dependencies { ... compile(name:'your aar lib name', ext:'aar') }

ότι όλα

αν μπορείτε να διαβάσετε τα κινέζικα, μπορείτε να ελέγξετε το blog 什么 是 AAR 文件 以及 如何 在 Android 开发 中 使用

6
shusheng007

Δοκίμασα όλες τις λύσεις εδώ, αλλά κανένας δεν δουλεύει, τότε συνειδητοποιώ ότι έκανα λάθος, έβαλα τον .aar σε λάθος φάκελο, όπως μπορείτε να δείτε παρακάτω, σκέφτηκα ότι θα έπρεπε να βάλω το root directory, έτσι δημιούργησα ένα φάκελο libs (1 στην εικόνα), αλλά μέσα στο φάκελο της εφαρμογής υπάρχει ήδη libs, θα πρέπει να βάλετε το δεύτερο libs, ελπίζουμε ότι αυτό θα βοηθήσει εκείνους που έχουν το ίδιο θέμα με το δικό μου:

enter image description here

3
GMsoF

Στην περίπτωσή μου, έχω κάποιες εξαρτήσεις στη βιβλιοθήκη μου και όταν δημιούργησα ένα aar από αυτό, απέτυχα, λόγω των χαμένων περιθωρίων, οπότε η λύση μου είναι να προσθέσω όλα τα εξαρτήματα από το lib μου με ένα αρχείο arr.

Έτσι, το επίπεδο build.gradle μου φαίνεται έτσι:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(modile app) έτσι:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //your project depencies
    ...
    //add lib via aar-depency
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //add all its internal depencies, as arr don't have it
    ...
}

και τη βιβλιοθήκη build.gradle:

apply plugin: 'com.Android.library'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //here goes library projects dependencies, which you must include
    //in yours build.gradle(modile app) too
    ...
}
3
mohax

Ο συνήθης τρόπος εισαγωγής αρχείου AAR σε μια εφαρμογή δίνεται στο https://developer.Android.com/studio/projects/Android-library.html#AddDependency

Κάντε κλικ στην επιλογή Αρχείο> Νέα> Νέα ενότητα. Κάντε κλικ στην επιλογή Εισαγωγή του πακέτου JAR/.AAR και, στη συνέχεια, κάντε κλικ στο κουμπί Επόμενο. Καταχωρίστε την τοποθεσία του αρχείου AAR ή JAR που έχει μεταγλωττιστεί, στη συνέχεια κάντε κλικ στο κουμπί Τέλος.

Ανατρέξτε στον παραπάνω σύνδεσμο για τα επόμενα βήματα.

3
garnet

Βρήκα αυτήν την λύση στον ανιχνευτή προβλήματος Android: https://code.google.com/p/Android/issues/detail?id=55863#c21

Το τέχνασμα (όχι μια λύση) είναι να απομονώσετε τα αρχεία σας .aar σε ένα υποέργο και προσθέτοντας τα libs σας ως αντικείμενα:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

Περισσότερες πληροφορίες: Χειρισμός-μεταβατικές-εξαρτήσεις-για-τοπικά-αντικείμενα-βάζα-και-αρα

2
jiparis

Απλώς απλοποιήστε την απάντηση

Εάν το αρχείο .aar είναι τοπικά παρόν, τότε συμπεριλάβετε
compile project(':project_directory') σε εξαρτήσεις της build.grade του έργου σας.

Αν το αρχείο .aar είναι παρόν σε απομακρυσμένο χώρο τότε συμπεριλαμβάνεται το compile 'com.*********.sdk:project_directory:0.0.1@aar' σε εξαρτήσεις του build.gradle του έργου σας.

2
anupam_kamble

Με το Android Studio 3.4 και το Gradle 5 μπορείτε απλά να το κάνετε όπως αυτό

dependencies {
    implementation files('libs/actionbarsherlock.aar')
}
1
m0skit0

Στην δική μου περίπτωση απλά δουλεύω όταν προσθέτω "έργο" για να συντάξω:

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}


dependencies {
   compile project('com.x.x:x:1.0.0')
}
0
josedlujan

μπορείτε να κάνετε κάτι τέτοιο:

  1. Τοποθετήστε τις τοπικές βιβλιοθήκες (με επέκταση: .jar, .aar, ...) στο φάκελο "libs" (ή άλλο, αν θέλετε).

  2. Στην έκδοση build.gradle (επίπεδο εφαρμογής), προσθέστε αυτή τη γραμμή σε εξάρσεις

    υλοποίηση fileTree (περιλαμβάνει: ['* .jar', '* .aar'], dir: 'libs')

0
nguyencse