aos SDK 연동할때

박은정·2024년 1월 17일
0

리액트네이티브

목록 보기
24/27

안드로이드 라이브러리 설치

안드로이드 앱이 여러 모듈로 나누어져 있을때, 각 모듈은 독립적으로 빌드될 수 있다
그래서 모듈 간에는 종속성이 있을 수도 있고 해당 종속성은 다른 모듈의 코드에서 클래스, 메서드, 상수 등을 사용할 때 발생한다
특정 모듈이 다른 모듈의 코드나 리소스를 사용하려고 할때, 해당 모듈에서 사용하려는 것이 API로 노출되어야 한다
이를 통해 다른 모듈에서 해당 모듈의 기능이나 클래스 등을 활용할 수 있게 된다

라이브러리를 api 키워드로 추가하면, 해당 라이브러리가 포함된 모듈이 다른 모듈에서 의존성으로 사용될 수 있다

즉, 다른 모듈에서 해당 라이브러리의 클래스나 기능을 직접 사용할 수 있고,
반면에 implementaion 키워드로 추가하게 되면 해당 라이브러리는 내부 구현에만 사용되어 외부 모듈에서 직접 접근할 수 없다

예를 들자면,
모듈 A에서 어떤 라이브러리르 api 키워드로 추가하면, 모듈 B에서 모듈 A의 코드나 기능을 사용할 수 있다
모듈 A를 만들 때 implementaion 키워드로 추가하면, 모듈 B에서는 해당 라이브러리를 직접 사용할 수 없고 모듈 A를 통해서만 해당 라이브러리의 기능을 이용할 수 있다

tapjoy SDK의 경우, tapjoy의 클래스, 메서드, 상수 등을 직접적으로 사용해야 하기 때문에 implementaion 키워드로 가져오면 찾을 수 없다는 에러가 발생했다

코틀린 라이브러리 버전 의존성이슈

Execution failed for task ':app:checkDebugDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
   > Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations$ReflectSdkVersion found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations$ReflectSdkVersion found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.io.path.ExperimentalPathApi found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.io.path.PathRelativizer found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.io.path.PathsKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.io.path.PathsKt__PathReadWriteKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.io.path.PathsKt__PathUtilsKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.jdk7.AutoCloseableKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
     Duplicate class kotlin.jvm.jdk8.JvmRepeatableKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.random.jdk8.PlatformThreadLocalRandom found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.streams.jdk8.StreamsKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$1 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$2 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$3 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$4 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.text.jdk8.RegexExtensionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
     Duplicate class kotlin.time.jdk8.DurationConversionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)

두가지 다른버전의 코틀린 라이브러리 kotlin-stdlib 가 동일한 클래스를 포함하고 있어서 발생한 오류이다
이러한 충돌은 일반적으로 다양한 종속성에서 동일한 라이브러리의 서로 다른 버전을 사용할 때 발생한다

jetified-kotlin-stdlib-1.8.0
jetified-kotlin-stdlib-jdk7-1.6.21 
jetified-kotlin-stdlib-jdk8-1.6.21 

등 서로 다른 버전의 코틀린 라이브러리를 나타낸다

버전 의존성이슈 해결방법

방법 1. 라이브러리 버전 일치시키기

  • 모든 모듈이 사용하는 코틀린 표준 라이브러리 버전을 동일하게 맞춘다
  • build.gradle 파일에서 사용하는 코틀린 라이브러리 버전을 확인하고, 가능하면 모듈 모듈에서 동일한 버전을 사용하도록 업데이트한다

방법 2. 의존성 그래픽 분석 도구 사용

  • gradle 또는 android studio에서 제공하는 의존성 그래픽 분석 도구를 사용해서 각 모듈의 종속성을 확인하고, 충돌을 일으키는 모듈을 식별한다
  • 해당 모듈의 종속성을 수정해서 버전 충돌을 해결한다

방법 3. 의존성 제외

  • 라이브러리 충돌이 발생하는 모듈에서 중복되는 라이브러리를 명시적으로 제외할 수 있다
configurations {
	all*.exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib'
}

여기서 나의 경우, 기존의 코틀린버전은 1.6.21버전이고 탭조이에서 사용하는 코틀린버전은 1.8.0버전이기 때문에 1.8.0버전으로 통일시켜줘서 해결했다

액티비티 정의할때 속성

안드로이드 모듈에서 액티비티를 실행하려면 Androidmenifest.xml 파일에서 액티비티를 정의해야 한다.
기존 프로젝트에서 액티비티를 정의할 때 아래 속성들을 사용했는데 의미를 찾아봤다.

  • android:exported="true"
    액티비티가 다른 애플리케이션의 구성요소에 의해 시작될 수 있다

  • android:launchMode="singleTop"
    액티비티의 시작모드를 정의하는데, singleTop 은 액티비티의 인스턴스가 이미 작업 스택의 맨 위에 존재하는 경우
    해당 인스턴스를 재사용하고 새로운 인스턴스를 생성하지 않도록 한다

  • android:parentActivityName=".MainActivity"

profile
새로운 것을 도전하고 노력한다

0개의 댓글