如何向 Android Studio 添加一个库项目?

How do I add a library project (such as Sherlock ABS) to Android Studio?

(Not to the old ADT Eclipse-based bundle, but to the new Android Studio.)

转载于:https://stackoverflow.com/questions/16588064/how-do-i-add-a-library-project-to-android-studio

csdnceshi64
游.程 Here is a video which I found to be really useful: youtube.com/watch?v=1MyBO9z7ojk
5 年多之前 回复
csdnceshi59
ℙℕℤℝ If you're using Gradle, see this StackOverflow answer.
接近 6 年之前 回复
csdnceshi52
妄徒之命 The YouTube video How to Add Libraries to Android Studio explains the process.
6 年多之前 回复
csdnceshi57
perhaps? yeah figuring this out was way more confusing than it should have been... not like it was any better in eclipse.
大约 7 年之前 回复

29个回答

Update for Android Studio 1.0

Since Android Studio 1.0 was released (and a lot of versions between v1.0 and one of the firsts from the time of my previous answer) some things has changed.

My description is focused on adding external library project by hand via Gradle files (for better understanding the process). If you want to add a library via Android Studio creator just check the answer below with visual guide (there are some differences between Android Studio 1.0 and those from screenshots, but the process is very similar).

Before you start adding a library to your project by hand, consider adding the external dependency. It won’t mess in your project structure. Almost every well-known Android library is available in a Maven repository and its installation takes only one line of code in the app/build.gradle file:

dependencies {
     compile 'com.jakewharton:butterknife:6.0.0'
}

Adding the library

Here is the full process of adding external Android library to our project:

  1. Create a new project via Android Studio creator. I named it HelloWorld.
  2. Here is the original project structure created by Android Studio:
HelloWorld/
      app/
           - build.gradle  // local Gradle configuration (for app only)
           ...
      - build.gradle // Global Gradle configuration (for whole project)
      - settings.gradle
      - gradle.properties
      ...
  1. In the root directory (HelloWorld/), create new folder: /libs in which we’ll place our external libraries (this step is not required - only for keeping a cleaner project structure).
  2. Paste your library in the newly created /libs folder. In this example I used PagerSlidingTabStrip library (just download ZIP from GitHub, rename library directory to „PagerSlidingTabStrip" and copy it). Here is the new structure of our project:
HelloWorld/
      app/
           - build.gradle  // Local Gradle configuration (for app only)
           ...
      libs/
           PagerSlidingTabStrip/
                - build.gradle // Local Gradle configuration (for library only)
      - build.gradle // Global Gradle configuration (for whole project)
      - settings.gradle
      - gradle.properties
      ...
  1. Edit settings.gradle by adding your library to include. If you use a custom path like I did, you have also to define the project directory for our library. A whole settings.gradle should look like below:

    include ':app', ':PagerSlidingTabStrip'
    project(':PagerSlidingTabStrip').projectDir = new File('libs/PagerSlidingTabStrip')
    

5.1 If you face "Default Configuration" error, then try this instead of step 5,

    include ':app'
    include ':libs:PagerSlidingTabStrip'
  1. In app/build.gradle add our library project as an dependency:

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:21.0.3'
        compile project(":PagerSlidingTabStrip")
    }
    

6.1. If you followed step 5.1, then follow this instead of 6,

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:21.0.3'

        compile project(":libs:PagerSlidingTabStrip")
    }
  1. If your library project doesn’t have build.gradle file you have to create it manually. Here is example of that file:

        apply plugin: 'com.android.library'
    
        dependencies {
            compile 'com.android.support:support-v4:21.0.3'
        }
    
        android {
            compileSdkVersion 21
            buildToolsVersion "21.1.2"
    
            defaultConfig {
                minSdkVersion 14
                targetSdkVersion 21
            }
    
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    res.srcDirs = ['res']
                }
            }
        }
    
  2. Additionally you can create a global configuration for your project which will contain SDK versions and build tools version for every module to keep consistency. Just edit gradle.properties file and add lines:

    ANDROID_BUILD_MIN_SDK_VERSION=14
    ANDROID_BUILD_TARGET_SDK_VERSION=21
    ANDROID_BUILD_TOOLS_VERSION=21.1.3
    ANDROID_BUILD_SDK_VERSION=21
    

    Now you can use it in your build.gradle files (in app and libraries modules) like below:

    //...
    android {
        compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
        buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
    
        defaultConfig {
            minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION)
            targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
        }
    }
    //...
    
  3. That’s all. Just click‚ synchronise the project with the Gradle’ icon synchronise with Gradle. Your library should be available in your project.

Google I/O 2013 - The New Android SDK Build System is a great presentation about building Android apps with Gradle Build System: As Xavier Ducrohet said:

Android Studio is all about editing, and debugging and profiling. It's not about building any more.

At the beginning it may be little bit confusing (especially for those, who works with Eclipse and have never seen the ant - like me ;) ), but at the end Gradle gives us some great opportunities and it worth to learn this build system.

csdnceshi67
bug^君 My project correpted thanks :) Error:(64, 0) No such property: sonatypeUsername for class: org.gradle.api.internal.project.DefaultProject_Decorated <a href="openFile">Open File</a>
接近 5 年之前 回复
csdnceshi63
elliott.david Error:Configuration with name 'default' not found...
大约 5 年之前 回复
csdnceshi66
必承其重 | 欲带皇冠 Try this instead on 5/5.1 project(':PagerSlidingTabStrip').projectDir = new File('app/libs/PagerSlidingTabStrip') for example
大约 5 年之前 回复
csdnceshi74
7*4 fantastic guide !
5 年多之前 回复
csdnceshi61
derek5. Both step 5 and 5.1 don't work
5 年多之前 回复
weixin_41568196
撒拉嘿哟木头 The library must be unzipped?
5 年多之前 回复
weixin_41568174
from.. I tried both 5 and 5.1 and in both cases i got the error: Error:Configuration with name 'default' not found. It is not working for me :/ @froger_mcs
5 年多之前 回复
csdnceshi57
perhaps? No difference for the final effect, but doing it in the gradle-way can help you to better understand app building.
5 年多之前 回复
csdnceshi62
csdnceshi62 This is a long comment thread but I felt it makes more sense to ask my question here. This answer and the answer below it accomplish the same goal. Which makes more sense assuming its not a maven repo? Should I do it with gradle? Or should i use the intellij type way?
5 年多之前 回复
csdnceshi57
perhaps? Have you added /libs directory in your project root like is described in 4th step?
5 年多之前 回复
csdnceshi58
Didn"t forge Can anyone help me for below issue, No signature of method: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.compile() is applicable for argument types: (org.gradle.api.internal.file.collections.DefaultConfigurableFileTree) values: [directory 'libs'] Possible solutions: module(java.lang.Object)
5 年多之前 回复
csdnceshi65
larry*wei Everyone will benefit if you can explain the same using screen shots....!!!!
5 年多之前 回复
csdnceshi57
perhaps? You were right. I've just updated my answer to the newest Android Studio (1.0) version.
5 年多之前 回复
csdnceshi73
喵-见缝插针 This answer is not up to date with the current Android Studio version.
5 年多之前 回复
weixin_41568110
七度&光 how to delete Actionbarsherlock module delete android-support-library,where is the location?
6 年多之前 回复
weixin_41568131
10.24 Import Module option is missing!!
6 年多之前 回复
csdnceshi70
笑故挽风 I have the same question as @ffleandro said. In current project structure, each application project contains one copy of the library project, how to use single library project in multiple application projects?
6 年多之前 回复
weixin_41568183
零零乙 Why dont i have "Import Module" section, at the option where you direct us ? I'm using Android Studio 0.3.1
接近 7 年之前 回复
csdnceshi75
衫裤跑路 Where is Global libraries (#10: "now go to Global libraries")? Other than that, it works as described :) Thanks so much. (I hope Google will get down to it - such a simple task is headscratchingly complex at the moment)
接近 7 年之前 回复
csdnceshi64
游.程 I can't find the sherlock library project after i copy it to the libraries folder. when I try to import a module.
大约 7 年之前 回复
csdnceshi79
python小菜 why don't you put the sample code into a github repo? it would make life easier, and potentially clarify some confusion.
大约 7 年之前 回复
csdnceshi79
python小菜 tried and tried.. just kept on getting this error: Gradle: A problem occurred configuring project ':HelloWorld'. > Failed to notify project evaluation listener. > Configuration with name 'default' not found. i also tried suggestions by @victorn. and akbar ibrahim.. still didn't work for me
大约 7 年之前 回复
csdnceshi57
perhaps? you are right. Including support library in two projects is bad practise. Here you have good answer how to add support library into two or more projects: stackoverflow.com/a/16746682/2021293
大约 7 年之前 回复
csdnceshi72
谁还没个明天 In your solution, my libraries need to be inside my project structure. What if I want to use a Library Project as dependency in several projects? How do I add to my gradle an external module dependency?
大约 7 年之前 回复
csdnceshi60
℡Wang Yan +1. Was struggling with this for a long time. As victor n said, referencing the main project's support jar from actionbarsherlock module doesn't work. I had to do the following to get it working... (1) Remove compile files('libs/android-support-v4.jar') from the project's build.gradle. The main module should only have compile project(":libraries:actionbarsherlock"). (2) Add compile files('libs/android-support-v4.jar') instead of compile files(':HelloWorld/libs/android-support-v4.jar') in actionbarsherlock's build.gradle.
大约 7 年之前 回复
csdnceshi68
local-host hey there, you perfectly explained the real issue. voting up your answer so other people can see it. one minor thing that didn't work on my side is referencing the support library in the dependency's build.gradle. as it turns out ':Project/libs...' did not work for some reason. i had to do away with the project identification. so 'libs/...'. and it compiled fine. one note is that these two ways of referencing paths or projects is confusing. i hope a simple and unified scheme comes up in the future. there is no reason why the original solution wouldn't work.
大约 7 年之前 回复

Here is the visual guide:

Update for Android Studio 0.8.2:

In Android Studio 0.8.2, go to Project Structure -> under Modules just hit the plus button and select Import Existing Project and import actionbarsherlock. Then synchronise your Gradle files.

If you face the error

Error: The SDK Build Tools revision (xx.x.x) is too low. Minimum required is yy.y.y

just open the build.gradle file in actionbarsherlock directory and update the buildToolsVersion to the suggested one.

android {
  compileSdkVersion 19
  buildToolsVersion 'yy.y.y'

Android Studio 0.8.2


Menu File -> Project Structure...:

First

Module -> Import Module

Second

After importing the library module, select your project module and add the dependency:

Third

And then select the imported module:

Forth

csdnceshi73
喵-见缝插针 It was way back during beta days of Android studio 0.4.3. As for accession 3rd party repo, id say, avoid using +. Just specify the version u want. If u still cant trust it enough, u can create a jar(or clone) of any repo and use it.
4 年多之前 回复
csdnceshi80
胖鸭 are... are you from the future? But seriously, they need to make this simple like it was in Eclipse ADT; who wants to hit a third-party repo and compile (potentially) arbitrary code into each build? That seriously undermines QA and code-freeze protocols
4 年多之前 回复
weixin_41568196
撒拉嘿哟木头 This will copy the library module in your project, which is not what you want if you want a common code base shared between several projects
接近 6 年之前 回复
csdnceshi76
斗士狗 The key for me to make this work and resolve the package not found errors was the step Select your project module and add dependency dependencies { // ... compile project(':library') }
接近 6 年之前 回复
csdnceshi73
喵-见缝插针 Import module option not available in Android Studio4.3
6 年多之前 回复

I would consider Dependencies, Android Libraries and Multi-project setup necessary reading. Please take a few minutes to do so.

Particularly, in the case of a non-jar library project, read the following snippet from above source:

Gradle projects can also depend on other gradle projects by using a multi-project setup. A multi-project setup usually works by having all the projects as sub folders of a given root project.

For instance, given to following structure:

MyProject/
 + app/
 + libraries/
    + lib1/
    + lib2/

We can identify 3 projects. Gradle will reference them with the following name:

:app
:libraries:lib1
:libraries:lib2

Each projects will have its own build.gradle declaring how it gets built. Additionally, there will be a file called settings.gradle at the root declaring the projects. This gives the following structure:

MyProject/
 | settings.gradle
 + app/
    | build.gradle
 + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

The content of settings.gradle is very simple:

include ':app', ':libraries:lib1', ':libraries:lib2'

This defines which folder is actually a Gradle project.

The :app project is likely to depend on the libraries, and this is done by declaring the following dependencies:

dependencies {
    compile project(':libraries:lib1')
}

Kindly note that there was little or no use of Android Studio GUI to make this happen.

I am currently using git submodules to link the nested library to the actual library git repo to avoid a dependency mess.

csdnceshi65
larry*wei Thanks for the git submodules tip. I was using junction before, but have now switched to SVN externals. Works like a charm.
大约 5 年之前 回复
csdnceshi53
Lotus@ thank you so much for including the only answer that makes sense. every other answer is outdated and just doesn't work. i didn't even try in CS at Virginia Tech because the whole first two years was learning to fckn click around in eclipse. it didn't make any fckn sense, but seeing the gradle result of random clicks in an IDE does.
6 年多之前 回复
csdnceshi75
衫裤跑路 Very helpful and, more importantly, not play to the gui whims of the day.
6 年多之前 回复
csdnceshi59
ℙℕℤℝ Kindly upvote if you found this helpful, so that others can avoid the pain and move along faster.
接近 7 年之前 回复

The easiest way I found to include external library project is (for example to include a Facebook library which is stored one directory up in the dependencies folder):

  1. In settings.gradle add

    include ':facebook'
    
    project(':facebook').projectDir = new File(settingsDir, '../dependencies/FacebookSDK')
    
  2. In build.gradle dependencies section, add

    compile project ('facebook')
    

All left to do is synchronise the project with gradle files.

weixin_41568131
10.24 NOTE: for string evaluation in gradle you must use double quote ("). This "save the day" for me. Linked to this
4 年多之前 回复
weixin_41568196
撒拉嘿哟木头 The two dots before /dependencies are more important to be cared Your answer helper me a lot.. Thanks
5 年多之前 回复
csdnceshi57
perhaps? Hi Rajnish. From documentation: settingsDir Returns the settings directory of the build. The settings directory is the directory containing the settings file. Returns: The settings directory. Never returns null.
5 年多之前 回复
weixin_41568196
撒拉嘿哟木头 Hi Vilen what is settingsDir here
5 年多之前 回复

After importing the ABS Module (from File > Project Structure) and making sure it has Android 2.2 and Support Library v4 as dependencies, I was still getting the following error as you @Alex

Error retrieving parent for item: No resource found that matches the given name 'Theme.Sherlock.Light.DarkActionBar'

I added the newly imported module as a dependency to my main app module and that fixed the problem.

csdnceshi79
python小菜 I'm migrate to IDEA 13 from 12 and have this error too. Only re-import for all my dependencies will help. Manually remove all modules, remove related *.iml files and re-import your libs
大约 7 年之前 回复
csdnceshi52
妄徒之命 Same here. Who can solved this?
大约 7 年之前 回复
csdnceshi57
perhaps? I tried all steps inclusing adding the module as a dependency but I still have Gradle: Error retrieving parent for item: No resource found that matches the given name 'Theme.Sherlock.Light'.. It seems like my main project does not see the resources of the library project (ABS). The IDE however does recognize the references to classes and resources. Screenshot
大约 7 年之前 回复

Editing library dependencies through the GUI is not advisable as that doesn't write those changes to your build.gradle file. So your project will not build from the command-line. We should edit the build.gradle file directly as follows.

For instance, given to following structure:

MyProject/

  • app/
  • libraries/
    • lib1/
    • lib2/

We can identify three projects. Gradle will reference them with the following names:

  1. :app
  2. :libraries:lib1
  3. :libraries:lib2

The :app project is likely to depend on the libraries, and this is done by declaring the following dependencies:

dependencies {
    compile project(':libraries:lib1')
}
csdnceshi68
local-host As editing through GUI doesn't writes those changes to your build.gradle file. GUI editing only saves changes in IntelliJ's own project data. This is a bug at the moment which will be fixed in future releases. You can refer to this answer from Google Android-Studio Team Lead stackoverflow.com/questions/16678447/…
大约 7 年之前 回复
csdnceshi54
hurriedly% Really? Strange, they have the whole GUI and yet it's not advisable. How so?
大约 7 年之前 回复

Indeed as versions are changing, so is changing the user interface and options available on the menu. After reading most of the answers to these questions I had to guess what would work for Android Studio 1.1.0.

  1. With your mouse, select the project at the main level (this is where it shows the name of your app).

  2. Right click, and select the menu options New, Folder, Assets Folder.

  3. After creating the assets folder, paste or copy in it, whatever JAR file you need for your library.

  4. From Android Studio's main menu (top of the screen) select File -> Project Structure.

  5. Then select your project name and go to the Dependencies tab.

  6. Click on the plus sign (+) on the lower left of the dialog box and select file dependency.

  7. Finally open the recently created assets folder, select the JAR files that you copied, and then click apply and OK.

Clean and rebuild your project.

weixin_41568134
MAO-EYE Thanks for the advise @RajnishMishra. I suspected that, but what do you propose instead?
5 年多之前 回复
csdnceshi55
~Onlooker making copies of jars in assets is not a good idea it will unnecessarily increase apk size
5 年多之前 回复

I have just found an easier way (rather than writing directly into the .gradle files).

This is for Android Studio 1.1.0.

  1. Menu File -> New Module...:

    Import Existing Project

    Click on "Import Existing Project".

  2. Select the desired library and the desired module.

  3. Click finish. Android Studio will import the library into your project. It will sync gradle files.

  4. Add the imported module to your project's dependencies.

    Right click on the app folder -> Open Module settings -> go to the dependencies tab -> Click on the '+' button -> click on Module Dependency.

    The library module will be then added to the project's dependencies.

    Add library module

  5. ???

  6. Profit

weixin_41568184
叼花硬汉 But what's step 5?! :-D
接近 2 年之前 回复

If you need access to the resources of a library project (as you do with ABS) ensure that you add the library project/module as a "Module Dependency" instead of a "Library".

csdnceshi68
local-host Yes! You sir win the Internet! Thanks! I have just wasted a couple of hours of my life because I didn't know that.
6 年多之前 回复

Android Studio 3.0

Just add the library name to the dependencies block of your app's build.gradle file.

dependencies {
    // ...
    implementation 'com.example:some-library:1.0.0'
}

Note that you should use implementation rather than compile now. This is new with Android Studio 3.0. See this Q&A for an explanation of the difference.

csdnceshi65
larry*wei It's actually a change in Gradle 4, not Android Studio 3. You can continue to use com.android.tools.build:gradle:2.3.3 instead of 3.0.0 in Android Studio 3 if you want to continue using "compile".
接近 3 年之前 回复
共29条数据 1 3 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问