안드로이드 앱은 자바코드와 리소스로 크게 구분지을 수 있다. 자바 코드에선 앱의 흐름과 기능을 정의하고 리소스에선 레이아웃이나 이미지처럼 사용자에게 보여주기 위해 사용하는 파일이나 데이터를 관리한다.
리소스 Resource
리소스를 자바 코드와 분리하는 이유는 관리도 쉽고 이해하기도 쉽기 때문이다. /app/res 폴더 이외에 리소스를 저장하는 /app/assets 폴더를 따로 만들 수도 있는데 차이점은 에셋은 동영상이나 웹페이지 같이 용량이 비교적 큰 데이터를 의미한다는 차이점이 있다. 리소스가 갱신되면 그 때마다 리소스의 정보가 R.java 파일에 자동으로 기록되며 그 정보는 리소스에 대한 내부적인 포인터 정보가 됩니다. 이렇게 저장되어 있는 리소스 정보를 코드에서 사용할 땐 Resources 객체를 참조하여 리소스를 읽어들여야 한다. Resources 객체는 Context.getResources() method를 이용해 액티비티 안에서 언제든 참조할 수 있고 리소스 유형별 메서드가 정의되어 있어 구분해서 필요에 따라 사용하면 된다.
* 스타일과 테마
스타일과 테마는 여러 속성을 한꺼번에 모아서 정의한 것으로 대표적으로 Dialog 테마를 들 수 있다. 안드로이드에서 자주 사용되는 스타일과 테마를 제공해서 이 제공되는 스타일과 테마를 이용해도 좋고, 따로 지정해서 사용할 수도 있다. 지정해서 사용하려면 /app/res/values/styles.xml 파일을 만들어서 style 태그안에 값을 지정해주면 된다.
메니페스트 manifest
메니페스트는 리소스는 아니지만 설치된 앱의 구성요소가 어떤것인지, 부여된 권한은 어떤 것이 있는지 시스템에 알려주는 역할을 합니다. 모든 안드로이드 앱은 상위 폴더에 매니페스트 파일이 있어야 하며 이 정보는 앱이 실행되기 전 시스템이 알아야 할 내용들을 정의하고 있습니다.
매니페스트에 들어갈 수 있는 태그 항목들은 :
<action> <activity> <activity-alias> <category> <data> <intent-filter> <manifest> <meta-data> <provider> <receiver> <service> ...
매니페스트의 주요 역할은 :
앱의 패키지 이름 지정, 앱 구성요소(액티비티, 서비스, 브로드캐스트수신자)에 대한 정보 등록, 각 구성요소 구현하는 클래스 이름 지정, 앱이 가져야하는 권한에 대한 정보 등록, 다른 앱이 접근하기 위해 필요한 권한에 대한 정보 등록, 앱에 필요한 안드로이드 API의 정보 등록, 앱에서 사용하는 라이브러리 리스트 등록 등이 있다.
매니페스트 파일의 기본 구조는 아래와 같다. 그리고 많은 액티비티 중 메인 액티비티는 Intent filter 태그 안에 <action> 태그의 경우 MAIN, <category> 태그의 경우 LAUNCHER로 지정해주어야 한다.
<manifest..>
<application ..>
<service android:name="org.xx.xxx."...>
</service>
</application>
</manifest>
그래들 gradle
안드로이드 앱을 실행하거나 앱 스토어에 올릴땐 소스파일이나 리소스 파일을 빌드하거나 배포하는 작업이 필요하다. 이때 사용되는 것이 그래들! 그래들은 안드로이드 스튜디오에서 사용하는 빌드 및 배포도구인 것임!
한 앱의 빌드 설정은 build.gradle 파일에 넣어 관리한다. 이 때 그래들 파일은 프로젝트 수준과 모듈수준으로 나눠 관리하기 때문에 새로운 프로젝트를 만들면 두개의 build.gradle 파일이 생긴다.
-프로젝트 수준 build gradle
buildscript{
repositories{
google()
jcenter()
}
dependencies{
classpath 'com.android.xxx'
{
}
allprojects{
repositories{
google()
jcenter()
}
}
task clean(type: Delete){
delete rootProject.buildDir
}
이 파일은 프로젝트 안에 들어있는 모든 모듈에 적용되는 설정을 담고 있고, 이 파일을 수정하는 경우는 거의 없다. 가끔 외부 도구를 포함시키기 위해 dependencies안에 classpath를 추가하는 정도의 수정만 있을 수 있다.
- 모듈 수준 build gradle
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "android.develop.hello"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.navigation:navigation-fragment:2.2.2'
implementation 'androidx.navigation:navigation-ui:2.2.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
이 파일은 모듈에 대한 설정을 담고 있다. 프로젝트가 만들어지면 app 모듈은 기본으로 만들어지는데 이 파일이 app 모듈에 대한 정보를 담고 있는 것. 만약 새로운 모듈을 추가한다면 그 모듈에 대한 build gradle 파일도 새로 추가 된다.
applicationId는 이 앱의 ID 값으로 ID값은 전 세계에서 유일한 값으로 설정되어야 한다.
compileSdkVersion은 빌드를 진행할때 어떤 버전의 SDK를 사용할 것인지 지정한다.
minSdkVersion 은 어떤 하위버전까지 지원하도록 할 것인지 지정한다.
targetSdkVersion은 이 앱이 검증된 버전이 어떤 SDK 버전인지 지정한다.
dependencies엔 외부 라이브러리를 추가할 수 있다.
마지막으로 seetings.gradle 파일엔 어떤 모듈을 포함할 것인지에대한 정보가 들어있다. 이외에도 local.properties 안에는 현재 사용하고 있는 PC에 설치된 SDK의 위치가 기록되어 있고, gradle.properties안에는 메모리 설정이 들어있다.
'안드로이드' 카테고리의 다른 글
위험 권한 부여 (1) | 2021.04.23 |
---|---|
서비스 Service (0) | 2021.04.23 |
뷰 페이저와 바로가기 메뉴 만들기 (0) | 2021.04.22 |
상단 탭과 하단 탭 setSupportActionBar 에러 해결 (0) | 2021.04.22 |
메뉴와 액션바 (0) | 2021.04.22 |
댓글