如何向 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 年多之前 回复

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 年多之前 回复

To add to the answer: If the IDE doesn't show any error, but when you try to compile, you get something like:

No resource found that matches the given name 'Theme.Sherlock.Light'

Your library project is probably compiled as an application project. To change this, go to:

Menu File -> Project structure -> Facets -> [Library name] -> Check "Library module".

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 年多之前 回复

Option 1: Drop Files Into Project's libs/directory

The relevant build.gradle file will then update automatically.

Option 2: Modify build.gradle File Manually

Open your build.gradle file and add a new build rule to the dependencies closure. For example, if you wanted to add Google Play Services, your project's dependencies section would look something like this:

dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     compile 'com.google.android.gms:play-services:6.5.+'
   }

Option 3: Use Android Studio's User Interface

In the Project panel, Control + click the module you want to add the dependency to and select Open Module Settings.

Enter image description here

Select the Dependencies tab, followed by the + button in the bottom-left corner. You can choose from the following list of options:

  • Library Dependency
  • File Dependency
  • Module Dependency

You can then enter more information about the dependency you want to add to your project. For example, if you choose Library Dependency, Android Studio displays a list of libraries for you to choose from.

Once you've added your dependency, check your module-level build.gradle file. It should have automatically updated to include the new dependency.

Source

This is how it works for me in Android Studio 1.5+

In the project where you want to add external library project, go to menu File -> New -> *Import new Module**, navigate to the library project which you want to add to your project, select to add 'library' module in your project. You will get settings.gradle in your projects, beside app, included library, something like this:

include ':app', ':library'

Add in build.gradle(Module :app) in the dependencies section:

Compile project(':library')

Rebuild the project, and that's it.

*You can add as many libraries (modules) as you want. In that case in settings.gradle you will have:

 include ':app', ':lib1', ':lib2', ...

And in build.gradle, you'll need to have:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // Some other dependencies...

    compile project(':lib1')
    compile project(':lib2')
    ...
}
  1. Press F4 to show Project Structure, click libraries or Global libraries, and click + to add the JAR file.
  2. Click Modules what you want add jar, select the Dependencies tab, click +, and add Library.

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 年之前 回复

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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐