<p>έχω πειραματιστεί με το νέο build σύστημα android και έχω έρθει σε ένα μικρό ζήτημα. έχω συντάξει το δικό μου πακέτο actionbarsherlock, το οποίο έχω ονομάσει 'actionbarsherlock.aar'. αυτό που προσπαθώ να κάνω είναι να χρησιμοποιήσω αυτό το aar για να φτιάξω το τελικό apk μου. αν συμπεριλάβω ολόκληρη τη βιβλιοθήκη actionbarsherlock ως λειτουργική μονάδα βιβλιοθήκης android στο κύριο έργο μου, χρησιμοποιώντας το πρόγραμμα compile (': actionbarsherlock') μπορώ να οικοδομήσω με επιτυχία χωρίς κανένα πρόβλημα.</p><p>αλλά το πρόβλημά μου είναι ότι θέλω να παράσχω αυτή την εξάρτηση ως ένα πακέτο αρχείων man μόνο αν ήμουν jar, τότε δεν μπορώ να καταλάβω πώς να το συμπεριλάβω σωστά στο έργο μου. προσπάθησα να χρησιμοποιήσω τη διαμόρφωση της μεταγλώττισης αλλά αυτό δεν φαίνεται να λειτουργεί. συνεχίζω να μην βρίσκω σύμβολο κατά τη μεταγλώττιση που μου λέει ότι τα classes.jar από το πακέτο aar δεν συμπεριλαμβάνονται στην ταξική πορεία.</p><p>μήπως κάποιος γνωρίζει τη σύνταξη για να συμπεριλάβει χειροκίνητα ένα πακέτο aar ως αρχείο;</p><p>build.gradle</p><pre><code>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" } </code></pre><p>edit: έτσι, η απάντηση είναι ότι δεν υποστηρίζεται αυτή τη στιγμή, εδώ είναι το <a href="https://code.google.com/p/android/issues/detail?id=55863">θέμα</a> αν θέλετε να το παρακολουθήσετε.</p><p>edit: επειδή αυτή δεν υποστηρίζεται άμεσα, η καλύτερη εναλλακτική λύση φαίνεται να είναι η προτεινόμενη λύση από το @ranwakshlak</p><p>edit: επίσης απλούστερη χρησιμοποιώντας τη σύνταξη που προτείνεται από το @vipulshah</p>
πώς να συμπεριλάβετε χειροκίνητα το εξωτερικό πακέτο aar χρησιμοποιώντας το νέο gradle android build system
<p><strong>παρακαλούμε ακολουθήστε τα παρακάτω βήματα για να το λειτουργήσετε (το έχω δοκιμάσει μέχρι το android studio 2.2)</strong></p><p>ας πούμε ότι έχετε κρατήσει aar αρχείο στο φάκελο libs. (υποθέστε ότι το όνομα του αρχείου είναι <code>cards.aar</code>)</p><p>στη συνέχεια, στην εφαρμογή <code>build.gradle</code> καθορίστε το ακόλουθο και κάντε κλικ στο έργο συγχρονισμού με τα αρχεία gradle. ανοίξτε το επίπεδο ανάπτυξης του έργου και προσθέστε το <code>flatdir{dirs 'libs'}</code> όπως παρακάτω</p><pre><code>allprojects { repositories { jcenter() flatdir { dirs 'libs' } } } </code></pre><p>και τώρα ανοίξτε το αρχείο εφαρμογής build.grdle και προσθέστε το αρχείο <code>.aar</code></p><pre><code> dependencies { compile(name:'cards', ext:'aar') } </code></pre><p>αν όλα πάνε καλά θα δείτε ότι η είσοδος της βιβλιοθήκης γίνεται στο build -&gt; exploded-aar</p><p>επίσης, σημειώστε ότι αν εισάγετε ένα αρχείο .aar από άλλο έργο που έχει εξαρτήσεις, θα πρέπει να το συμπεριλάβετε και στο build.gradle.</p>
<ol> <li>κάντε δεξί κλικ στο έργο σας και επιλέξτε <strong> "ανοίξτε τις ρυθμίσεις μονάδας" </strong>.</li> </ol><p> <a href="https://i.stack.imgur.com/bu5d2.png"><img src="https://i.stack.imgur.com/bu5d2.png" alt="open module settings"></a> </p><ol start="2"> <li>κάντε κλικ στο κουμπί <strong> "+" </strong> στην επάνω αριστερή γωνία του παραθύρου για να προσθέσετε μια νέα ενότητα.</li> </ol><p> <a href="https://i.stack.imgur.com/oeh90.png"><img src="https://i.stack.imgur.com/oeh90.png" alt="add new module"></a> </p><ol start="3"> <li>επιλέξτε <strong> "εισαγωγή του πακέτου .jar ή .aar" </strong> και κάντε κλικ στο <strong> "επόμενο" </strong>.</li> </ol><p> <a href="https://i.stack.imgur.com/cmj8e.png"><img src="https://i.stack.imgur.com/cmj8e.png" alt="import aar"></a> </p><ol start="4"> <li>βρείτε το αρχείο aar χρησιμοποιώντας το κουμπί ellipsis <strong> "..." </strong> δίπλα στο πεδίο "όνομα αρχείου".</li> </ol><p> <a href="https://i.stack.imgur.com/dooxm.png"><img src="https://i.stack.imgur.com/dooxm.png" alt="find aar file"></a> </p><ol start="5"> <li>κρατήστε την ενότητα της εφαρμογής και επιλέξτε το παράθυρο <strong> εξαρτημάτων </strong> για να προσθέσετε τη νέα μονάδα ως εξάρτηση.</li> </ol><p> <a href="https://i.stack.imgur.com/ojtop.png"><img src="https://i.stack.imgur.com/ojtop.png" alt="dependencies pane"></a> </p><ol start="6"> <li>χρησιμοποιήστε το κουμπί <strong> "+" </strong> της οθόνης εξαρτήσεων και επιλέξτε <strong> "εξάρτηση μονάδας" </strong>.</li> </ol><p> <a href="https://i.stack.imgur.com/ao0eg.png"><img src="https://i.stack.imgur.com/ao0eg.png" alt="add module dependency"></a> </p><ol start="7"> <li>επιλέξτε τη μονάδα και κάντε κλικ <strong> "ok" </strong>.</li> </ol><p> <a href="https://i.stack.imgur.com/26yra.png"><img src="https://i.stack.imgur.com/26yra.png" alt="choose module"></a> </p>
<p>μπορείτε να αναφέρετε ένα αρχείο aar από ένα αποθετήριο. το maven είναι μια επιλογή, αλλά υπάρχει μια πιο απλή λύση: βάλτε το αρχείο aar στον κατάλογο libs και προσθέστε ένα κατάλογο καταλόγων.</p><pre><code>repositories { mavencentral() flatdir { dirs 'libs' } } </code></pre><p>στη συνέχεια, ανατρέξτε στη βιβλιοθήκη στην ενότητα εξάρτησης:</p><pre><code>dependencies { compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' } </code></pre><p>μπορείτε να ελέγξετε έξω <a href="http://life.nimbco.com/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/">min'an blog post</a> για περισσότερες πληροφορίες.</p>
<p>η παρακάτω προσέγγιση λειτουργεί με το πιο πρόσφατο στούντιο android (&gt; v0.8.x):</p><ul> <li> <p>αποθηκεύστε το αρχείο <code>aar</code> κάτω από το φάκελο <code>libs</code> της εφαρμογής της εφαρμογής (π.χ.: <code>&lt;project&gt;/&lt;app&gt;/libs/myaar.aar</code>)</p> </li> <li> <p>προσθέστε τα παρακάτω για να build.gradle του φακέλου λειτουργικής μονάδας "app" (όχι το build.gradle του project root). σημειώστε το όνομα στη γραμμή σύνταξης, είναι myaar @ aar όχι myaar.aar.</p> <pre><code>dependencies { compile 'package.name.of.your.aar:myaar@aar' } repositories{ flatdir{ dirs 'libs' } } </code></pre></li> <li> <p>κάντε κλικ στο <code>tools -&gt; android -&gt; sync project with gradle files</code></p> </li> </ul>
<p>πριν (προεπιλογή)</p><pre><code>implementation filetree(include: ['*.jar'], dir: 'libs') </code></pre><p>απλά προσθέστε <code>'*.aar'</code> σε <code>include</code> array.</p><pre><code>implementation filetree(include: ['*.jar', '*.aar'], dir: 'libs') </code></pre><p>λειτουργεί καλά στο android studio 3.x.</p><p>αν θέλετε να αγνοήσετε κάποια βιβλιοθήκη; κάνετε αυτό.</p><pre><code>implementation filetree(include: ['*.jar', '*.aar'], exclude: 'test\_aar*', dir: 'libs') debugimplementation files('libs/test\_aar-debug.aar') releaseimplementation files('libs/test\_aar-release.aar') </code></pre>
<p>αυτή τη στιγμή η αναφορά ενός τοπικού αρχείου .aar δεν υποστηρίζεται (όπως επιβεβαιώθηκε από τον xavier ducrochet)</p><p>τι μπορείτε να κάνετε αντ 'αυτού δημιουργείται ένα τοπικό αποθετήριο maven (πολύ απλούστερο από αυτό που ακούγεται) και ανατρέξτε στο .aar από εκεί.</p><p>έχω γράψει ένα blogpost που περιγράφει πώς να το δουλέψω εδώ:</p><p> <a href="http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds">http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-grade-builds</a> </p>
<p>μόλις κατάφερα!</p><ol> <li> <p>αντιγράψτε το αρχείο <strong>mylib-0.1.aar</strong> στο φάκελο <strong>libs /</strong></p> </li> <li> <p>προσθέστε αυτές τις γραμμές στο κάτω μέρος της <strong>build.gradle</strong> (πρέπει να είναι app, όχι project):</p> <pre><code>repositories { flatdir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' } </code></pre></li> <li> <p>μέχρι εδώ καλά. εδώ έρχεται το πιο σημαντικό σημείο:</p> </li> </ol><p>το gradle πρέπει να έχει πρόσβαση στο δίκτυο για εξαρτήσεις, εκτός εάν είναι ενεργοποιημένη η λειτουργία εκτός σύνδεσης.</p><p>βεβαιωθείτε ότι έχετε ενεργοποιήσει το <strong>εργασία χωρίς σύνδεση</strong> μέσω του πλαισίου ελέγχου <strong>project structures/gradle</strong></p><p>- or -</p><p>ρυθμίστε τις ρυθμίσεις <strong>ρυθμίσεις διακομιστή μεσολάβησης</strong> για να αποκτήσετε πρόσβαση στο δίκτυο.</p><p>για να διαμορφώσετε τις ρυθμίσεις του διακομιστή μεσολάβησης, πρέπει να τροποποιήσετε το αρχείο <strong>gradle.properties</strong> του έργου, διαμορφώνοντας ξεχωριστά το http και το https όπως παρακάτω:</p><pre><code>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 &lt;for nt auth&gt; 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 &lt;for nt auth&gt; </code></pre><p>ελπίζω ότι αυτό θα λειτουργήσει.</p>
<p>μπορείτε να προσθέσετε πολλαπλές εξαρτήσεις <code>aar</code> με μερικές μόνο γραμμές κώδικα.</p><p>προσθήκη τοπικού <code>flatdir</code> αποθετηρίου:</p><pre><code>repositories { flatdir { dirs 'libs' } } </code></pre><p>προσθέστε κάθε <code>aar</code> σε κατάλογο <code>libs</code> σε <code>compile</code> διαμόρφωση εξάρτησης:</p><pre><code>filetree(dir: 'libs', include: '**/*.aar') .each { file file -&gt; dependencies.add("compile", [name: file.name.lastindexof('.').with { it != -1 ? file.name[0..&lt;it] : file.name }, ext: 'aar']) } </code></pre>
<p>δυστυχώς, καμία από τις λύσεις εδώ δεν λειτούργησε για μένα (παίρνω ανεπίλυτες εξαρτήσεις). αυτό που τελικά λειτούργησε και είναι ο ευκολότερος τρόπος imho είναι: επισημάνετε το όνομα του έργου από το android studio, στη συνέχεια file -&gt; new module -&gt; import jar ή aar package. η πίστωση πηγαίνει στη λύση σε <a href="http://www.telerik.com/forums/failed-to-resolve-error-in-android-studio-1-1">αυτό το post</a> </p>
<p>είχα και αυτό το πρόβλημα. αυτή η αναφορά έκδοσης: <a href="https://code.google.com/p/android/issues/detail?id=55863">https://code.google.com/p/android/issues/detail?id=5586</a> φαίνεται να υποδηλώνει ότι η απευθείας αναφορά στο αρχείο .aar δεν υποστηρίζεται.</p><p>ίσως η εναλλακτική λύση για τώρα είναι να ορίσετε τη βιβλιοθήκη actionbarsherlock ως μια βιβλιοθήκη gradle κάτω από τον γονικό κατάλογο του έργου σας και αναφορά αναλόγως.</p><p>η σύνταξη ορίζεται εδώ <a href="http://tools.android.com/tech-docs/new-build-system/user-guide#toc-referencing-a-library">http://tools.android.com/tech-docs/new-build-system/user-guide#toc-referencing--library</a> </p>
<p>υπάρχουν 2 τρόποι:</p><ul> <li>πρώτος τρόπος</li> </ul><p>1: ανοίξτε το android studio και μεταβείτε στο παράθυρο "δημιουργία νέας μονάδας" από το file-&gt; new-&gt; new module ...</p><p> <a href="https://i.stack.imgur.com/7xwvm.jpg"><img src="https://i.stack.imgur.com/7xwvm.jpg" alt="enter image description here"></a> </p><p>2: επιλέξτε το στοιχείο "εισαγωγή .jar/.aar package" και κάντε κλικ στο κουμπί επόμενου</p><p>3: προσθέστε την εξάρτηση στο αρχείο <code>build.gradle</code> που ανήκει στο modul <code>app</code>.</p><pre><code>dependencies { ... implementation project(path: ':your aar lib name') } </code></pre><p>ότι όλα.</p><ul> <li>δεύτερος τρόπος</li> </ul><p>1 δημιουργήστε ένα φάκελο στον κατάλογο <code>libs</code>, όπως <code>aars</code>.</p><p>2 τοποθετήστε το aar lib στον φάκελο aars.</p><p>3 προσθέστε το απόσπασμα κώδικα</p><p><code>repositories { flatdir { dirs 'libs/aars' } }</code></p><p>στο αρχείο <code>build.gradle</code> σας ανήκουν στην ενότητα εφαρμογών.</p><p>4 προσθέστε την εξάρτηση στο αρχείο <code>build.gradle</code> που ανήκει στο modul <code>app</code>.</p><p><code>dependencies { ... compile(name:'your aar lib name', ext:'aar') }</code></p><p>ότι όλα</p><p>αν μπορείτε να διαβάσετε τα κινέζικα, μπορείτε να ελέγξετε το blog <a href="https://blog.csdn.net/shusheng0007/article/details/79666505">什么 是 aar 文件 以及 如何 在 android 开发 中 使用</a> </p>
<p>δοκίμασα όλες τις λύσεις εδώ, αλλά κανένας δεν δουλεύει, τότε συνειδητοποιώ ότι έκανα λάθος, έβαλα τον <code>.aar</code> σε λάθος φάκελο, όπως μπορείτε να δείτε παρακάτω, σκέφτηκα ότι θα έπρεπε να βάλω το root directory, έτσι δημιούργησα ένα φάκελο <code>libs</code> (1 στην εικόνα), αλλά μέσα στο φάκελο της εφαρμογής υπάρχει ήδη <code>libs</code>, θα πρέπει να βάλετε το δεύτερο <code>libs</code>, ελπίζουμε ότι αυτό θα βοηθήσει εκείνους που έχουν το ίδιο θέμα με το δικό μου:</p><p> <a href="https://i.stack.imgur.com/emypr.png"><img src="https://i.stack.imgur.com/emypr.png" alt="enter image description here"></a> </p>
<p>στην περίπτωσή μου, έχω κάποιες εξαρτήσεις στη βιβλιοθήκη μου και όταν δημιούργησα ένα <code>aar</code> από αυτό, απέτυχα, λόγω των χαμένων περιθωρίων, οπότε η λύση μου είναι να προσθέσω όλα τα εξαρτήματα από το lib μου με ένα αρχείο <code>arr</code>.</p><p>έτσι, το επίπεδο <code>build.gradle</code> μου φαίνεται έτσι:</p><pre><code>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 } </code></pre><p><code>build.gradle(modile app)</code> έτσι:</p><pre><code>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 ... } </code></pre><p>και τη βιβλιοθήκη <code>build.gradle</code>:</p><pre><code>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 ... } </code></pre>
<p>ο συνήθης τρόπος εισαγωγής αρχείου aar σε μια εφαρμογή δίνεται στο <a href="https://developer.android.com/studio/projects/android-library.html#adddependency">https://developer.android.com/studio/projects/android-library.html#adddependency</a> </p><p>κάντε κλικ στην επιλογή αρχείο&gt; νέα&gt; νέα ενότητα. κάντε κλικ στην επιλογή εισαγωγή του πακέτου jar/.aar και, στη συνέχεια, κάντε κλικ στο κουμπί επόμενο. καταχωρίστε την τοποθεσία του αρχείου aar ή jar που έχει μεταγλωττιστεί, στη συνέχεια κάντε κλικ στο κουμπί τέλος.</p><p>ανατρέξτε στον παραπάνω σύνδεσμο για τα επόμενα βήματα.</p>
<p>βρήκα αυτήν την λύση στον ανιχνευτή προβλήματος android: <a href="https://code.google.com/p/android/issues/detail?id=55863#c21">https://code.google.com/p/android/issues/detail?id=55863#c21</a> </p><p>το τέχνασμα (όχι μια λύση) είναι να απομονώσετε τα αρχεία σας .aar σε ένα υποέργο και προσθέτοντας τα libs σας ως αντικείμενα:</p><pre><code>configurations.create("default") artifacts.add("default", file('somelib.jar')) artifacts.add("default", file('someaar.aar')) </code></pre><p>περισσότερες πληροφορίες: <a href="http://tools.android.com/tech-docs/new-build-system/tips#toc-handling-transitive-dependencies-for-local-artifacts-jars-and-aar-">χειρισμός-μεταβατικές-εξαρτήσεις-για-τοπικά-αντικείμενα-βάζα-και-αρα</a> </p>
<p>απλώς απλοποιήστε την απάντηση</p><p>εάν το αρχείο .aar είναι τοπικά παρόν, τότε συμπεριλάβετε<br> <code>compile project(':project\_directory')</code> σε εξαρτήσεις της build.grade του έργου σας.</p><p>αν το αρχείο .aar είναι παρόν σε απομακρυσμένο χώρο τότε συμπεριλαμβάνεται το <code>compile 'com.*********.sdk:project\_directory:0.0.1@aar'</code> σε εξαρτήσεις του build.gradle του έργου σας.</p>
<p>με το android studio 3.4 και το gradle 5 μπορείτε απλά να το κάνετε όπως αυτό</p><pre><code>dependencies { implementation files('libs/actionbarsherlock.aar') } </code></pre>
<p>στην δική μου περίπτωση απλά δουλεύω όταν προσθέτω "έργο" για να συντάξω:</p><pre><code>repositories { mavencentral() flatdir { dirs 'libs' } } dependencies { compile project('com.x.x:x:1.0.0') } </code></pre>
<p>μπορείτε να κάνετε κάτι τέτοιο:</p><ol> <li> <p>τοποθετήστε τις τοπικές βιβλιοθήκες (με επέκταση: .jar, .aar, ...) στο φάκελο "libs" (ή άλλο, αν θέλετε).</p> </li> <li> <p>στην έκδοση build.gradle (επίπεδο εφαρμογής), προσθέστε αυτή τη γραμμή σε εξάρσεις</p> <p><em>υλοποίηση filetree (περιλαμβάνει: ['* .jar', '* .aar'], dir: 'libs')</em></p> </li> </ol>