일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스택 큐 차이
- 안드로이드 유닛 테스트
- jvm 작동 원리
- 안드로이드 os 구조
- android retrofit login
- 안드로이드 라이선스 종류
- 2022 플러터 설치
- rxjava hot observable
- 안드로이드 레트로핏 사용법
- 안드로이드 라이선스
- 클래스
- 객체
- rxjava disposable
- 안드로이드 레트로핏 crud
- 2022 플러터 안드로이드 스튜디오
- Rxjava Observable
- 스택 자바 코드
- 안드로이드 유닛 테스트 예시
- 자바 다형성
- 서비스 vs 쓰레드
- 플러터 설치 2022
- 안드로이드 유닛테스트란
- ar vr 차이
- 서비스 쓰레드 차이
- ANR이란
- jvm이란
- 큐 자바 코드
- rxjava cold observable
- android ar 개발
- 멤버변수
- Today
- Total
나만을 위한 블로그
[Android] 맥북 M1 Pro에서 안드로이드 라이브러리(aar) 만드는 법 (with Kotlin) 본문
※ 코틀린을 사용해서 진행했다
사용한 맥북과 안드로이드 스튜디오 버전은 아래와 같다.
이전 글과 마찬가지로 상세 내용은 아래 링크를 참고했다.
https://jroomstudio.tistory.com/78
맥북에 자바와 안드로이드 스튜디오를 설치하는 부분은 생략한다. 이 글을 진행하기 전 먼저 프로젝트를 2개 만들어야 한다.
- 실제 프로젝트
- 모듈로 사용할 프로젝트
모듈로 사용할 프로젝트 생성
File > New > New project를 눌러 프로젝트를 만든다. 이 때 No Activity 또는 Empty Activity를 선택해야 한다.
나는 Empty Activity로 프로젝트를 만들면 쓸데없는 것들이 생긴다고 생각해서 No Activity를 선택해 진행했다.
선택했다면 위에 말한대로 프로젝트 패키지명을 수정한다.
그 다음 매니페스트 파일을 보면 이렇게 되어 있다.
이 매니페스트를 아래처럼 바꾼다.
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example.presentation"/>
그리고 앱 수준 gradle을 연다. 처음에는 이렇게 되어 있을 것이다.
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.presentation"
minSdk 26
targetSdk 32
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
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
여기서 바꿀 내용은 2가지다.
- com.android.application -> com.android.library라고 변경
- defaultConfig 중괄호 안의 applicationId 삭제
모두 바꾸면 아래처럼 보일 것이다.
plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk 32
defaultConfig {
minSdk 26
targetSdk 32
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
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
오른쪽 위의 Sync now를 누르면 동기화가 빠르게 이뤄진다. 이제 com.aaa.bbb 폴더 안에 모듈로 사용할 파일을 만들고 그 안에 필요한 함수들을 만든다. 여기선 토스트 메시지를 띄우는 함수를 만들었다.
import android.content.Context
import android.widget.Toast
class PresentationModule {
companion object {
fun showToasts(context: Context, msg: String) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
}
}
}
이 시점에서 내가 보는 안드로이드 화면은 아래와 같았다.
그 다음 Build > Make Module 'XXX.app'을 클릭한다. 그러면 뭐가 진행되는데 다 끝나면 app > build > outputs > aar 폴더 안에 aar 확장자 파일이 생긴다. 이제 이 파일을 실제 프로젝트로 옮겨야 한다.
실제 프로젝트에 적용
실제 프로젝트의 app > libs 경로로 이동해서 방금 생성된 aar 파일을 넣는다. 왼쪽의 domain은 테스트용으로 먼저 집어넣은 것이기 때문에 무시한다.
그 다음 안드로이드 스튜디오에서 실제 프로젝트를 연 다음 File > Project Structure를 눌러 아래 화면으로 이동한다.
Dependencies를 누른 다음 app을 누른 화면이다. 이 상태에서 Declared Dependencies 밑의 파란색 +를 누르고 JAR/AAR Dependency를 누른다.
Step 2는 무시하고 Step 1만 본다. Step 1에 조금 전 만든 aar이 위치한 경로를 파일명과 같이 입력하면 된다. libs/app-debug.aar을 입력한 다음 OK를 누르면 위의 창이 꺼진다. 그리고 Apply를 눌러 적용하고 OK를 누른다. 그러면 아래 화면처럼 보일 것이다.
만약 위 화면처럼 implementation files()가 나오지 않는다면 직접 입력해준다.
이제 내가 만든 모듈을 라이브러리처럼 사용할 수 있게 됐다. 메인 액티비티의 onCreate() 안에 메서드명을 입력하면 import하겠냐는 문구가 나타나는데, 바로 import해서 사용하면 된다. 아래는 내가 사용한 코드다. 1번째 메서드는 다른 모듈에서 가져온 메서드라 무시하면 된다.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.domain.Test.Companion.showToast
import com.example.presentation.PresentationModule.Companion.showToasts
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
showToast(this, "from domain module")
showToasts(this, "from app module")
}
}
아래는 실행화면이다.
'Android' 카테고리의 다른 글
[Android] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent 에러 해결 (0) | 2022.04.29 |
---|---|
[Android] Koin이란? Koin 사용법 (0) | 2022.04.29 |
[Android] 여러 체크박스들을 배열에 담아서 클릭 리스너 붙이는 법 (0) | 2022.03.31 |
[Android] Gson이란? Gson 사용법 (0) | 2022.02.20 |
[Android] espresso를 사용한 UI 테스트(+리사이클러뷰) (0) | 2022.02.07 |