Android Studio에서 라이브러리 프로젝트를 작성하는 방법 및 라이브러리 프로젝트를 사용하는 애플리케이션 프로젝트


164

나는 gradle 빌드 시스템과 IntelliJ를 처음 사용합니다.

Android 라이브러리 프로젝트 (예 : com.myapp.lib1)와 응용 프로그램 프로젝트 (예 : com.myapp.app)를 작성하고 빌드 시스템이 com.myapp.lib1을 응용 프로그램 프로젝트에 포함 시키려면 어떻게해야합니까?

프로젝트 구조-> 모듈-> 내 앱 프로젝트로 이동하여 lib 프로젝트에 대한 종속성을 추가했습니다. IntelliJ는 이제 앱 프로젝트에서 사용될 때 lib 프로젝트의 클래스를 인식 할 수 있지만 앱 프로젝트를 실행할 때 다음과 같은 오류가 있습니다.

Gradle: error: package com.myapp.lib1 does not exist

1
Android 라이브러리를 사용하여 무료 / 유료 버전의 앱을 빌드하고있었습니다. 새로운 Gradle 빌드 시스템은 Build Variants 개념으로이 접근 방식을 더 이상 사용하지 않습니다. 이제 동일한 코드에서 다른 서명 된 APK를 자동으로 빌드 할 수 있습니다. 나는 이것을 더 빨리 알기를 바란다.
theczechsensation

1
@ theczechsensation-- 정교 할 수 있습니까? 정식 버전의 APK를 업로드 한 후 무료 버전의 APK를 업로드하려고 시도했지만 동일한 패키지 이름을 사용했습니다. Google Play 스토어 (GPS)에서 해당 패키지 이름을 이미 사용했다는 메시지가 표시되었습니다. gradle에 대해 말하는 것은 두 개의 별도 패키지에 두 개의 별도 앱이 필요하지 않다는 것을 의미합니까?
DSlomer64

완벽한 답변은 stackoverflow.com/a/31366602/1118772 입니다. Aqib Mumtaz가 답변에 언급했지만 마지막입니다. 다른 방법으로 시간을 낭비하는 대신이 작업을 수행 할 수 있습니다. philosophicalhacker.com/2014/10/02/…
Noundla Sandeep

그림 설명과 함께 라이브러리를 추가하는 재미있는 스레드 .
Harish

답변:


111

라이브러리를 만들려면

파일> 새 모듈

Android 라이브러리를 선택하십시오.

Lib

라이브러리를 사용하려면 라이브러리를 종속성으로 추가하십시오.

파일> 프로젝트 구조> 모듈> 종속성

뎁

그런 다음 모듈 (안드로이드 라이브러리)을 모듈 종속성으로 추가하십시오.

모듈 추가

프로젝트를 실행하십시오. 그것은 것이다 작동합니다.


194
프로젝트 내에 모듈 파일이 생성됩니다. 모듈을 다른 응용 프로그램과 함께 사용할 수 있도록 프로젝트 외부에 배치하려면 어떻게해야합니까?
rrbrambley

2
@rrbrambley : 여러 프로젝트에서 모듈을 재사용하는 방법을 찾았습니다. Windows 용 winbolic link라는 응용 프로그램을 사용하여 (NTFS Junction) 폴더 링크를 만들었습니다. 여러 프로젝트에서 재사용하고 싶은 모듈이 있으면, 각 프로젝트의 디렉토리 안에 재사용 할 프로젝트에 대한 폴더 링크를 만듭니다. 그런 다음 Andr. Studio에서 모듈 종속성을 추가합니다. 이제 동기화를 유지하면서 각 프로젝트에서 모듈을 사용 / 편집 할 수 있습니다. 그것이 올바른 길인지 확실하지 않지만 현재로서는 잘 작동하는 것 같습니다! 이것은 로컬 maven repo보다 낫습니다.
Peter

1
안타깝게도 2014 년 7 월 현재 화면에 표시된 것과 같은 프로젝트 설정이 더 이상 없습니다. 아래 GrkEngineer의 답변과 같이 .grade 파일을 편집해야했습니다.
팀 브레이

24
기존 프로젝트 내에서 모듈을 만들 때 투표에 참여해야합니다
Jonathan

2
다른 프로젝트에서 동일한 lib를 사용하려면 라이브러리 모듈을 해당 프로젝트에 복사하고 settings.gradle 및 기본 모듈의 build.gradle을 수동으로 구성해야합니다.
하노이

114

왜 독립형 jar 프로젝트의 예가 없는지 궁금합니다.

이클립스에서는 프로젝트 설정 대화 상자에서 "라이브러리입니다"상자를 선택하십시오.
Android 스튜디오 에서이 단계를 따라 jar 파일을 얻었습니다.

  1. 프로젝트를 작성하십시오.

  2. 왼쪽 프로젝트 메뉴에서 파일을 엽니 다. (app / build.gradle) : Gradle Scripts> build.gradle (모듈 : XXX)

  3. 한 줄 변경 : apply plugin: 'com.android.application'->'apply plugin: com.android.library'

  4. 파일에서 applicationId를 제거하십시오. applicationId "com.mycompany.testproject"

  5. 프로젝트 빌드 : 빌드> 프로젝트 다시 빌드

  6. 그런 다음 aar 파일을 얻을 수 있습니다 : app> build> outputs> aar folder

  7. 변경 aar파일 확장자로zip

  8. 압축을 풀면 classes.jar폴더에서 볼 수 있습니다 . 이름을 바꾸고 사용하십시오!

어쨌든, 왜 안드로이드 스튜디오에서 구글이 왜 항아리 생성을 귀찮게하는지 모르겠습니다.


1
Android Studio 2.2.2에서 작동합니다. 2016.
허먼

95

여러 프로젝트를 빌드하기 위해 gradle 파일을 구성하는 Google의 Gradle 플러그인 권장 방법에는 몇 가지 단점이 있습니다. 하나의 라이브러리 프로젝트에 따라 여러 프로젝트가있는 경우이 게시물에서는 Google의 권장 구성, 단점을 간략하게 설명하고 다른 방법으로 gradle 파일을 구성하는 방법을 권장합니다 Android Studio에서 다중 프로젝트 설정 지원 :

안드로이드 스튜디오를위한 대체 멀티 프로젝트 설정

다른 방법 :

Android Studio에서 여러 프로젝트를 관리하는 더 좋은 방법이 있습니다. 비결은 라이브러리에 대해 별도의 Android Studio 프로젝트를 만들고 앱이 의존하는 라이브러리 모듈이 라이브러리의 프로젝트 디렉토리에 있음을 gradle에 알리는 것입니다. 위에서 설명한 프로젝트 구조와 함께이 방법을 사용하려면 다음을 수행하십시오.

  1. StickyListHeaders 라이브러리를위한 Android Studio 프로젝트 작성
  2. App2 용 Android Studio 프로젝트 생성
  3. App1 용 Android Studio 프로젝트 생성
  4. StickyListHeaders 프로젝트에서 모듈을 빌드하도록 App1 및 App2를 구성하십시오.

네 번째 단계는 어려운 부분이므로 자세히 설명 할 유일한 단계입니다. settings.gradle 파일에 프로젝트 문을 추가하고 해당 프로젝트 문에 의해 반환 된 ProjectDescriptor 객체에서 projectDir 속성을 설정하여 프로젝트 디렉토리 외부에있는 모듈을 참조 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

하나의 코드를 넣어야합니다 settings.gradle:

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

이 작업을 올바르게 수행했다면 프로젝트가 참조하는 모듈이 프로젝트 탐색기 외부에 표시되어 있어도 프로젝트에서 참조하는 모듈이 프로젝트 탐색기에 표시됩니다.

여기에 이미지 설명을 입력하십시오

이를 통해 라이브러리 코드와 앱 코드를 동시에 작업 할 수 있습니다. 이 방법으로 외부에서 모듈을 참조 할 때 버전 제어 통합도 제대로 작동합니다. 앱 코드를 커밋하고 푸시하는 것처럼 수정 사항을 라이브러리 코드에 커밋하고 푸시 할 수 있습니다.

여러 프로젝트를 설정하는이 방법은 Google의 권장 구성을 괴롭히는 어려움을 피합니다. 우리는 프로젝트 디렉토리 외부에있는 모듈을 참조하기 때문에 의존하는 모든 앱에 대해 라이브러리 모듈을 추가로 복사 할 필요가 없으며 어떤 종류의 git submodule 넌센스없이 라이브러리 버전을 지정할 수 있습니다.

불행히도, 여러 프로젝트를 설정하는 다른 방법은 찾기가 매우 어렵습니다. 분명히 Google 가이드를 보면 알 수없는 것이 아니며이 시점에서 Android Studio의 UI를 사용하여 이러한 방식으로 프로젝트를 구성 할 수있는 방법이 없습니다.


4
이것이 완벽한 해답입니다. 감사.
Noundla Sandeep

1
좋은 답변이지만 링크가 끊어 질 경우 게시물에서 답변으로 관련 비트를 복사해야합니다.
그레이슨 파 렐리

2
참고 : Gradle을에서 문자열 평가를 위해 당신은 큰 따옴표 ( ")를 사용해야합니다 나를 위해 일"저장에 링크 된이가. ".
Solata

1
앱 코드에서 라이브러리 코드를 어떻게 참조합니까? 설정 지침을 따른 후에도 앱 코드는 여전히 라이브러리 코드의 패키지를 참조 할 수 없습니다. 추가 단계가 필요합니까?
CEGRD

2
@CEGRD 파일> 프로젝트 구조로 이동하여 작업중인 모듈의 이름을 클릭해야합니다. 그런 다음 종속성 탭으로 이동하여 드롭 다운 메뉴에서 '+'를 클릭 한 다음 '모듈 종속성'을 클릭하십시오. 그런 다음 library1 모듈을 현재 프로젝트에 추가 할 수 있어야합니다.
OliasailO 2016 년

45

다중 프로젝트 설정에 대한링크를 확인하십시오 .

지적해야 할 사항은 앱과 라이브러리 모듈을 모두 참조하도록 settings.gradle을 업데이트했는지 확인하십시오.

settings.gradle : include ':app', ':libraries:lib1', ':libraries:lib2'

또한 앱의 build.gradle에 다음 사항이 있는지 확인하십시오.

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

다음 구조를 가져야합니다.

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

앱의 build.gradle은 com.android.application플러그인을 사용해야 하지만 라이브러리의 build.gradle은com.android.library 플러그인을 .

이 설정으로 명령 행에서 빌드 할 수있는 경우 Android Studio IDE가 업데이트되어야합니다.


build.gradle에 정의 된 플러그인이 유일한 차이점입니까? 즉, 한 줄을 변경하여 기존 모듈을 Android 라이브러리로 변경할 수 있습니까?
Enrico

22
언젠가 가져 오기 버튼을 클릭하면 라이브러리가 작동하고 편집기에서 코드를 입력하기 시작합니다.
Steve M

6
이 접근법은 실제 프로젝트 내에 라이브러리를 포함하는 것으로 보입니다. OP가 원했던 것은 자체 프로젝트 / 공간에 존재하고 메인 앱 프로젝트에만 lib로 포함 된 별도의 Android 라이브러리 프로젝트를 만드는 방법을 아는 것이 었습니다.
Jonathan

@SteveM 그것은 내 경력 전체에 걸쳐 내 문제가되었습니다. 디자인없이 코딩을 시작합니다. 그런 다음 디버깅 및 리팩토링에 몇 시간을 소비합니다.
Rajkiran

13

Intellij IDEA (및 Android Studio)의 경우 각 라이브러리는 모듈입니다. Android Studio의 모듈을 Eclipse의 프로젝트와 동등한 것으로 생각하십시오. Android Studio의 프로젝트는 모듈 모음입니다. 모듈은 실행 가능한 응용 프로그램 또는 라이브러리 모듈 일 수 있습니다.

따라서 새 Android 라이브러리 프로젝트를 추가하려면 "Android 라이브러리"유형의 모듈을 작성해야합니다. 그런 다음이 라이브러리 모듈을 기본 모듈 (응용 프로그램 모듈)의 종속성 목록에 추가하십시오.


12

라이브러리 프로젝트 를 만들고 재사용 있는 가장 간단한 방법은 다음 과 같습니다.

  1. 열린 프로젝트에서 file > new > new module(UI 질문에 대답하십시오)

여기에 이미지 설명을 입력하십시오

  1. 파일 settings.gradle 에 있는지 확인하거나 추가하십시오 .include ':myLibrary'
  2. build.gradle 파일에 있는지 확인하거나 추가하십시오 .

    dependencies { ... compile project(':myLibrary') }

  3. 이 라이브러리 모듈을 다른 프로젝트에서 재사용하려면 1 단계 대신 프로젝트의 폴더를 복사하고 2 단계와 3 단계를 수행하십시오.

새 스튜디오 응용 프로그램 프로젝트를 만들 수도 있습니다 . build.gradle 파일의 플러그인 할당을 com.android.library로 변경하여 기존 응용 프로그램 모듈을 라이브러리 모듈로 쉽게 변경할 수 있습니다.

apply plugin: 'com.android.application'

android {...}

apply plugin: 'com.android.library'

android {...}

여기에


플러그인 할당을 변경하여 기존 애플리케이션 모듈을 라이브러리 모듈로 변경하는 경우 gradle 파일에서`applicationId "com ...."행을 제거해야합니다.
TDG

"경고 : 구성 '컴파일'은 더 이상 사용되지 않으며 '구현'및 'api'로 대체되었습니다."
slhck

9

Blundell 과 같은 응용 프로그램에 새 모듈추가 할 수 있습니다 그의 대답에 말한다 다음 다른 응용 프로그램에서 참조.

모듈을 컴퓨터의 임의의 위치로 이동하려면 모듈 폴더를 이동하십시오 (모듈은 완전히 독립적 임). 그러면 모듈을 참조해야합니다.

이 모듈을 참조하려면 다음을 수행해야합니다.

  • 앱의 build.gradle 파일에서 다음을 추가하십시오.

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • settings.gradle 파일에서 다음을 추가하십시오.

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    

예를 들어 project(':library').projectDir = new File('../library')어디 library안드로이드 프로젝트의 폴더와 병렬로 폴더 이름입니다.
누군가 어딘가에

5

사용하는 것을 잊지 마십시오 apply plugin: 'com.android.library'당신의 build.gradle대신 플러그인 적용'com.android.application'


4

문서화 방법

이것은 Android Studio 설명서에 제공된 조언에 따라 권장되는 방법입니다.

라이브러리 모듈 생성

라이브러리를 만들 새 프로젝트를 작성하십시오. 파일> 새로 작성> 새 모듈> Android 라이브러리> 다음> (이름 선택)> 완료를 클릭하십시오 . 그런 다음 원하는 클래스와 리소스를 라이브러리에 추가하십시오.

모듈을 빌드하면 AAR 파일이 작성됩니다. 에서 찾을 수 있습니다 project-name/module-name/build/outputs/aar/.

라이브러리를 종속성으로 추가

라이브러리를 다음과 같은 다른 프로젝트에 대한 종속성으로 추가 할 수 있습니다.

  1. 파일> 새 모듈> .JAR / .AAR 패키지 가져 오기> 다음> (파일 위치 선택)> 완료로 라이브러리 AAR 파일 가져 오기 . (코드를 가져 오지 마십시오. 그렇지 않으면 너무 많은 곳에서 편집 할 수 있습니다.)
  2. settings.gradle 파일에서 라이브러리 이름이 있는지 확인하십시오.

    include ':app', ':my-library-module'
    
  3. 앱의 build.gradle 파일에서 compile line을 dependencies 섹션에 추가하십시오 :

    dependencies {
        compile project(":my-library-module")
    }
    
  4. 프로젝트를 gradle과 동기화하라는 메시지가 표시됩니다. 해.

그게 다야. 지금 라이브러리를 사용할 수 있어야합니다.

노트

더 많은 사용자가 라이브러리를 쉽게 사용할 수있게하려면 JitPac 또는 JCenter 사용을 고려하십시오 .


3

같은 질문이 있었고 다음과 같이 해결했습니다.

시작 상황 :

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

Target : 모듈을 추가하고 싶습니다dataformats

  1. (예 : 새로운 모듈을 추가 Java Library)
  2. settings.gradle다음과 같이 보이게 하십시오 (일반적으로 자동) :

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. 라이브러리를 사용해야하는 모듈 파일이 다음과 같은 종속성을 가지고 있는지 확인하십시오 ( 수동 ) build.gradle.

    dependencies { ... compile project(':dataformats') }



2

위의 체코 센세이션 주석으로 Gradle Build Varians를 검색하려고 시도 하고이 링크를 찾았습니다. http://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005 이것은 매우 간단한 솔루션입니다. 이것이 내가 한 일입니다 :-build.gradle에서 :

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

그런 다음 2 가지 버전의 앱이 있습니다. 위의 코드에서 2 개의 applicationId 인 2 개의 다른 packageName을 사용한 프로 및 평가판을 사용하여 Google Play에 둘 다 업로드 할 수 있습니다. 나는 여전히 "main"섹션에 코드를 작성하고 getpackageName을 사용하여 버전으로 전환합니다. 자세한 내용은 링크로 이동하십시오.


1

하나가 작동하지 않으면 가장 간단한 두 가지 방법이 있습니다. 다른 하나를 시도하십시오.

  1. 라이브러리 ur의 build.gradle 파일 내에 라이브러리 내부 종속성을 사용하여 추가하고 ur 라이브러리를 외부 라이브러리에 붙여 넣습니다.

또는

  1. 그냥 app 폴더 안의 libs 폴더로 가서 모든 .jar, 예를 들어 라이브러리 파일을 붙여 넣으십시오. 이제 여기서 속임수는 settings.gradle 파일 안에 들어가서 "include ': app : libs'"줄을 "include '뒤에 추가하십시오. app ' "확실히 작동합니다 ........... :)

1

필자의 경우 MAC OS X 10.11 및 Android 2.0을 사용하고 Aqib Mumtaz가 설명한 것을 정확하게 수행했습니다.

그러나 매번 다음과 같은 메시지가 나타납니다. " ': app'프로젝트를 구성하는 중에 문제가 발생했습니다.> 모듈 xxx를 평가할 수 없습니다. 이름이 'default'인 구성을 찾을 수 없습니다. ."

이 메시지의 이유는 Android 2.0에서 라이브러리를 직접 만들 수 없기 때문입니다. 그래서 먼저 appjet을 만들고 build.gradle을 라이브러리로 변환하기 위해 수정하기로 결정했습니다.

라이브러리 프로젝트는 앱 프로젝트와 매우 다르기 때문에이 솔루션은 작동하지 않습니다.

그래서 다음과 같이 내 문제를 해결했습니다.

  • 먼저 표준 앱을 작성하십시오 (필요한 경우).
  • 그런 다음 '파일 / 모듈 만들기'를 선택하십시오
  • 파인더로 이동하여 프레임 워크 디렉토리에 새로 작성된 모듈의 폴더를 이동하십시오.

그런 다음 Aqib Mumtaz가 제안한 솔루션을 계속하십시오.

결과적으로 매번 소스 파일을 복제하지 않고도 라이브러리 소스를 공유 할 수 있습니다.

이것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.