问题
I\'ve been experimenting with the new android build system and I\'ve run into a small issue. I\'ve compiled my own aar package of ActionBarSherlock which I\'ve called \'actionbarsherlock.aar\'. What I\'m trying to do is actually use this aar to build my final APK. If I include the whole ActionBarSherlock library as an android-library module to my main project using compile project (\':actionbarsherlock\') I\'m able to build successfully without any problems.
But my problem is that I want to provide that dependency as a aar file package MANUALLY just if I would a JAR then I can\'t seem to figure out how to properly include it into my project. I\'ve attempted to use the compile configuration but this doesn\'t seem to work. I keep on getting cannot find symbol during compile which tells me that the classes.jar from aar package isn\'t getting included in the classpath.
Does anyone know of the syntax to manually include an aar package as a file?
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: So the answer is that it\'s not currently supported, here\'s the issue if you want to track it.
EDIT: Currently as this is still not supported directly the best alternative seems to be the proposed solution from @RanWakshlak
EDIT: Also simpler by using the syntax proposed by @VipulShah
回答1:
Please follow below steps to get it working ( I have tested it up to Android Studio 2.2)
Lets say you have kept aar file in libs folder. ( assume file name is cards.aar
)
then in app build.gradle
specify following and click sync project with Gradle files.
Open Project level build.gradle and add flatDir{dirs 'libs'}
like did below
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
and now open app level build.grdle file and add .aar
file
dependencies {
compile(name:'cards', ext:'aar')
}
If everything goes well you will see library entry is made in build -> exploded-aar
Also note that if you are importing a .aar file from another project that has dependencies you'll need to include these in your build.gradle, too.
回答2:
- Right click on your project and select "Open Module Settings".
- Click the "+" button in the top left corner of window to add a new module.
- Select "Import .JAR or .AAR Package" and click the "Next" button.
- Find the AAR file using the ellipsis button "..." beside the "File name" field.
- Keep the app's module selected and click on the Dependencies pane to add the new module as a dependency.
- Use the "+" button of the dependencies screen and select "Module dependency".
- Select the module and click "OK".
回答3:
You can reference an aar file from a repository. A maven is an option, but there is a simpler solution: put the aar file in your libs directory and add a directory repository.
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
Then reference the library in the dependency section:
dependencies {
implementation 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}
You can check out Min'an blog post for more info.
回答4:
The below approach works with latest Android studio (> v0.8.x):
Save the
aar
file under app module'slibs
folder (eg:<project>/<app>/libs/myaar.aar
)Add the below to build.gradle of your "app" module folder (not your project root build.gradle). Note the name in compile line, it is myaar@aar not myaar.aar.
dependencies { compile 'package.name.of.your.aar:myaar@aar' } repositories{ flatDir{ dirs 'libs' } }
Click
Tools -> Android -> Sync Project with Gradle Files
回答5:
before(default)
implementation fileTree(include: ['*.jar'], dir: 'libs')
just add '*.aar'
in include
array.
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
it works well on Android Studio 3.x.
if you want ignore some library? do like this.
implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')
回答6:
Currently referencing a local .aar file is not supported (as confirmed by Xavier Ducrochet)
What you can do instead is set up a local Maven repository (much more simple than it sounds) and reference the .aar from there.
I've written a blogpost detailing how to get it working here:
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
回答7:
I've just succeeded!
Copy the mylib-0.1.aar file into the libs/ folder
Add these lines to the bottom of build.gradle (should be app, not project):
repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' }
So far so good. Here comes the most important point:
Gradle needs to access the network for dependencies unless offline mode is enabled.
Make sure that you have enabled Offline work via the checkbox in Project Structures/Gradle
-- OR --
Configure the proxy settings in order to access the network.
To configure the proxy settings you have to modify the project's gradle.properties file, configuring http and https separately as below:
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>
Hope this works.
回答8:
You can add multiple aar
dependencies with just few lines of code.
Add local flatDir
repository:
repositories {
flatDir {
dirs 'libs'
}
}
Add every aar
in libs
directory to compile
dependency configuration:
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'])
}
回答9:
Unfortunately none of the solutions here worked for me (I get unresolved dependencies). What finally worked and is the easiest way IMHO is: Highlight the project name from Android Studio then File -> New Module -> Import JAR or AAR Package. Credit goes to the solution in this post
回答10:
There are 2 ways:
The first way
- Open your Android Studio and navigate to the "Create New Module" window by File->New->New Module ...
Select the "Import .JAR/.AAR Package" item and click next button
Add a dependency in the
build.gradle
file that belongs to yourapp
Modlue.dependencies { ...
implementation project(path: ':your aar lib name')
}
That's all.
The second way
Create a folder in
libs
directory ,such asaars
.Put your aar lib into the aars folder.
Add the code snippet
repositories {
flatDir {
dirs 'libs/aars'
}
}
into your build.gradle
file belong to app module.
- Add a dependency in the
build.gradle
file that belongs to yourapp
Modlue.
dependencies {
...
compile(name:'your aar lib name', ext:'aar')
}
That's all.
If you can read Chinese, you can check the blog 什么是AAR文件以及如何在Android开发中使用
回答11:
I've also had this problem. This issue report: https://code.google.com/p/android/issues/detail?id=55863 seems to suggest that directly referencing the .AAR file is not supported.
Perhaps the alternative for now is to define the actionbarsherlock library as a Gradle library under the parent directory of your project and reference accordingly.
The syntax is defined here http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library
回答12:
With Android Studio 3.4 and Gradle 5 you can simply do it like this
dependencies {
implementation files('libs/actionbarsherlock.aar')
}
回答13:
In my case I have some depencies in my library and when I create an aar
from it I failed, because of missed depencies, so my solution is to add all depencies from my lib with an arr
file.
So my project level build.gradle
looks so:
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)
so:
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
...
}
and library 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
...
}
回答14:
I tried all solution here but none is working, then I realise I made a mistake, I put the .aar
in wrong folder, as you can see below, I thought I should put in root folder, so I created a libs
folder there (1 in picture), but inside the app folder, there is already a libs
, you should put in second libs
, hope this help those who has same issue as mine:
回答15:
The standard way to import AAR file in an application is given in https://developer.android.com/studio/projects/android-library.html#AddDependency
Click File > New > New Module. Click Import .JAR/.AAR Package then click Next. Enter the location of the compiled AAR or JAR file then click Finish.
Please refer the link above for next steps.
回答16:
I found this workaround in the Android issue tracker: https://code.google.com/p/android/issues/detail?id=55863#c21
The trick (not a fix) is to isolating your .aar files into a subproject and adding your libs as artifacts:
configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))
More info: Handling-transitive-dependencies-for-local-artifacts-jars-and-aar
回答17:
Just to simplify the answer
If .aar file is locally present then includecompile project(':project_directory')
in dependencies of build.gradle of your project.
If .aar file present at remote then include
compile 'com.*********.sdk:project_directory:0.0.1@aar'
in dependencies of build.gradle of your project.
回答18:
UPDATE ANDROID STUDIO 3.4
- Go to File -> Project Structure
- Modules and click on +
- Select Import .aar Package
- Find the .aar route
- Finish and Apply, then verify if package is added
- Now in the app module, click on + and Module Dependency
- Check the library package and Ok
- Verify the added dependency
- And the project structure like this
回答19:
In my case just work when i add "project" to compile:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile project('com.x.x:x:1.0.0')
}
回答20:
you can do something like this:
Put your local libraries (with extension: .jar, .aar, ...) into 'libs' Folder (or another if you want).
In build.gradle (app level), add this line into dependences
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
来源:https://stackoverflow.com/questions/16682847/how-to-manually-include-external-aar-package-using-new-gradle-android-build-syst