미스터리 : Android Studio의 프로젝트 구조 및 빌드 시스템
이것이 Gradle Build System 때문인지는 모르겠지만 (내기 할게요), 지금까지 제가 이해 한 바를 말씀 드리겠습니다.
업데이트 4 : 2014년 9월 11일 추가 치트 시트 에 대한 BuildTypes
, Flavors
그리고 Variants
(나는 마침내이 쓸 자신감 : D를)
업데이트 3 : 2014년 9월 11일 정확한로 비교 작업 영역 및 프로젝트 업데이트
업데이트 2 : 2014년 4월 17일 AS 프로젝트 구조
업데이트 1 : 2013/07/29에 IntelliJ 프로젝트 구조 추가
IntelliJ의 프로젝트 구조 (마지막에 표시됨)는 Android 플러그인을 사용하는 IntelliJ 용입니다. 그러나 Android Studio에는 다음과 같이 분할 된 프로젝트 구조가 있습니다.
구조 : 프로젝트 및 모듈
모듈 의 안드로이드 스튜디오 는 A입니다 프로젝트 에서 이클립스
프로젝트 에서 안드로이드 스튜디오 는 A입니다 작업 공간 에서 이클립스 (정확하고, 상호 의존적 인 프로젝트와 작업 공간)
에서 문서 (안드로이드 스튜디오를하게 IntelliJ IDEA 기반으로) :
IntelliJ IDEA에서 수행하는 작업은 프로젝트의 맥락에서 수행합니다. 프로젝트는 완전한 소프트웨어 솔루션을 나타내는 조직 단위입니다.
완성 된 제품은 일련의 분리 된 분리 된 모듈로 분해 될 수 있지만,이를 하나로 모아 더 큰 전체로 묶는 프로젝트 정의입니다.
Android의 경우 앱당 하나의 프로젝트, 라이브러리 및 테스트 앱당 하나의 모듈을 의미합니다.
동일한 프로젝트 내에서 여러 앱을 빌드하려고하면 여러 문제가 있습니다. 가능하지만 시도해 보면 거의 모든 것이 프로젝트 당 하나의 앱으로 작동하도록 설계되었음을 알 수 있습니다.
예를 들어 "프로젝트를 다시 빌드"하는 옵션이 있는데, 이는 여러 앱에서 의미가 없으며 다른 많은 프로젝트 설정은 쓸모가 없으며 내장 된 VCS 시스템은 여러 저장소가있는 경우 좋지 않습니다.
구조 : 폴더 구조
최상위 폴더
1. 주요 프로젝트
이것은 전체 프로젝트 컨텍스트 가 될 것입니다 ( Eclipse Land : 작업 공간과 비슷하지만 프로젝트와 관련된 것으로 제한됨). 예 : HelloWorldProject
귀하가 제공 한 신청서의 이름이HelloWorld
2. .idea
여기에는 프로젝트 별 메타 데이터가 Android 스튜디오 (AS)에 의해 저장됩니다. ( Eclipse Land : project.properties
파일)
3. 프로젝트 모듈
이것은 실제 프로젝트입니다. 예 : 제공 한 HelloWorld
애플리케이션 이름이 HelloWorld 인 경우
4. gradle
이것은 gradle 빌드 시스템의 jar 래퍼가있는 곳입니다. 즉,이 jar는 AS가 Windows에 설치된 gradle과 통신하는 방법입니다 (제 경우에는 OS).
5. 외부 라이브러리
이것은 실제로 폴더가 아니라 Referenced Libraries ( Eclipse Land : Referenced Libraries)가 표시되는 곳입니다. 여기에 타겟 플랫폼이 표시됩니다.
[ 참고 : Eclipse Land의 많은 사람들이 참조 된 라이브러리를 삭제하고 참조 오류를 수정하기 위해 프로젝트 속성을 수정하는 데 사용했습니다. 기억하십니까?]
세부 프로젝트 폴더
위 목록에서 3 번입니다. 다음 하위 디렉토리가 있습니다.
1. 빌드
이것은 make
classes.dex, 컴파일 된 클래스 및 리소스 등과 같은 프로세스 의 모든 완전한 출력을 가지고 있습니다 .
Android Studio GUI에는 몇 개의 폴더 만 표시됩니다. 중요한 부분은 R.java가 여기 아래에 있다는 것입니다.build/source/<flavor>/r/<build type(optional)>/<package>/R.java
2. libs
이것은 Eclipse Land 에서도 볼 수있는 표준 libs 폴더입니다.
3. src
여기에서는 Eclipse Land 의 폴더 및 폴더에 해당하는 java
및 res
폴더 만 표시 됩니다. 이것은 매우 환영받는 단순화 IMHO입니다.src
res
모듈에 대한 참고 사항 :
모듈은 Eclipse Land 프로젝트 와 같습니다 . 여기서 아이디어는 응용 프로그램 프로젝트가 의존하는 하나의 응용 프로그램 프로젝트 (위 목록의 모듈 # 3)와 여러 라이브러리 프로젝트 (전역 프로젝트 폴더 아래의 별도 모듈 (위 목록의 # 1))가 있다는 것입니다. 이러한 라이브러리 프로젝트를 다른 응용 프로그램에서 어떻게 재사용 할 수 있는지 아직 알지 못했습니다.
[ 참고 사항 : 전체 재구성에는 src 폴더의 단순화와 같은 몇 가지 이점이 있지만 많은 복잡성이 있습니다. 문제는 주로이 새로운 프로젝트 레이아웃에 대한 매우 얇은 문서 때문 입니다.]
새로운 빌드 시스템
새로운 빌드 시스템에 대한 사용자 가이드
풍미 및 buildTypes 등에 대한 설명-헐라 발루는 무엇입니까?
플레이버 및 빌드 유형에 대한 CheatSheet
BuildType : debug
하고 release
있는 buildTypes
모든 프로젝트에 기본적으로 사용할. 다른 APK를 생성하기 위해 동일한 코드 를 빌드 / 컴파일하기위한 것 입니다. 예를 들어 release
APK에서 proguard (난독 화를 위해)를 실행하고, 키로 서명하고 (디버그 키에 대해), 최적화를 실행하고 (아마도 proguard 또는 기타 도구를 통해) 약간 다른 packageNames
사용 ( com.company.product
for release
및 com.company.product.debug
for debug
)을 사용 합니다 . 등. 또한 디버그 플래그 ( BuildConfig.DEBUG
)를 사용하여 빌드 에서 logcat에 대한 로깅을 끕니다 (앱이 느려지기 때문에) release
. 이것은 debug
개발 중에 더 빠른 빌드를 제공 release
할 뿐만 아니라 플레이 스토어에 배치 할 최적화 된 빌드를 제공합니다.
제품 맛 : 사용할 수있는 기본 맛이 없습니다 (정확히 말하자면 기본 맛은 공백 / 이름 없음). 무료 버전 또는 다른 코드 가있는 유료 버전 일Flavors
수 있습니다 . 그들은 동일한 코드를 공유 하지만 몇 가지 소스 코드 파일 또는 리소스의 다른 버전 (또는 버전 없음)을 공유합니다 .Main
BuildVariant : A buildVariant
는 생성 된 APK가 실제로 해당하는 것입니다. 그들은 (순서대로) Product Flavor
+ Build Type
=Build Variant
와 같이 이름이 지정 됩니다.
예 1 : 당신이있는 경우 free
와 paid
두 가지 종류로. 얻을 수있는 빌드 변형은 다음과 같습니다.
무료-디버그
무료-출시
유료-디버그
유료-출시
4 가지 가능한 APK 구성입니다. 몇 가지 구성은 특정 프로젝트에 이해가되지 않을 수 있습니다,하지만 그들은 이다 가능합니다.
예 2 : (새 프로젝트의 경우 / 버전 없음) buildVariants
기본 버전이 이름 없음 / 공백이므로 2 개 또는 APK를 사용할 수 있습니다.
디버그
릴리스
.idea (1) 폴더에는 주로 내부 IntelliJ IDEA 정보가있는 여러 하위 폴더가 포함되어 있습니다.
src (2) 폴더에는 애플리케이션의 기능을 구현하는 MyActivity.java (3) 파일 소스 코드 가 포함되어 있습니다 . 파일은 com.example 패키지에 속합니다.
res (4) 폴더에는 다양한 시각적 리소스가 포함되어 있습니다.
layout / main.xml 파일 (5) 은 다양한 유형의 리소스로 구성된 애플리케이션의 모양을 정의합니다.
values 폴더 (6) 는 다양한 유형의 리소스를 설명하는 .xml 파일을 저장하기위한 것입니다. 현재 폴더에는 문자열 리소스 정의가있는 strings.xml 파일이 포함되어 있습니다. 색상 추가 섹션에서 볼 수 있듯이 레이아웃 폴더에는 예를 들어 색상 설명자가 포함될 수도 있습니다.
드로어 블 폴더 (7) 에는 이미지가 포함되어 있습니다.
gen (8) 폴더 에는 시각적 리소스와 Java 소스 코드를 연결하는 R.java (9) 파일이 있습니다. 아래 섹션에서 볼 수 있듯이 IntelliJ IDEA는 정적 리소스와 R.java 간의 긴밀한 통합을 지원합니다. 리소스가 추가되거나 제거되는 즉시 R.java의 해당 클래스 및 클래스 필드가 자동으로 생성되거나 제거됩니다. R.java 파일도 com.example 패키지에 속합니다.