ChamomileGuides 3.0.4 Help

캐모마일 환경설정 가이드(AOS)

프로젝트 구성

  1. 라이브러리

    • 프레임워크 라이브러리 및 각 기능별 라이브러리로 구성

    • flex_framework_x.x.x-release.aar - 자바스크립트 코드와 네이티브 코드를 연결 해주는 핵심 라이브러리

  2. Module QR코드, 카메라, GPS 등 각 기능별 모듈, 공통 메서드들을 모아놓은 Utils object class , 데이터를 암복호화 하는 AndroidKeyStoreUtil object class

    file

라이브러리 적용 방법

  1. 프로젝트를 실행 > 프로젝트 보기 설정을 Project로 변경

    file

  2. 프레임워크에 있는 aar파일(flexFramework/app/libs/flex_framework_x.x.x-release.aar)을 프로젝트의 libs폴더에 넣음.

    file

  3. app 수준의 build.gradle에 implementation files('libs/flex_framework_x.x.x-release.aar') 코드 추가

    file

  4. Sync Now 클릭

    file

  5. app > manifest > AndroidManifest.xml 다음 코드를 추가 tools:replace="android:theme"

    file

  6. 라이브러리가 추가되었는지 확인 File > Project Structure

    file

  7. Dependencies > app, 다음과 같이 추가되어있으면 정상적으로 추가된것

    file

Module 소스코드 추가

  1. 프로젝트창 > 설정(톱니바퀴 모양) > Tree Appearance > Compact Middle Packages 체크 해제

    file

  2. 'ldcc' package 생성

    file
    file

  3. 'ldcc' package 밑에 module 소스코드 추가
    경로 - app/src/main/java/com/ldcc/module

    file

설정 파일 셋팅

file
  1. webView url 설정 웹 뷰의 url을 설정해준다. (name = "url")

    file

  2. 앱 정보 설정 앱 이름, 앱 id, os 유형을 설정해준다. (name = "app_name", "app_id", "os_type") 여기서 설정한 앱 정보는 추후에 admin페이지에서 앱을 등록할때, api를 호출할때 사용된다.

    file

  3. 서버 정보 설정 API 통신할 서버 주소(base_url)를 설정해준다. (name = "retrofit_url") 여기서 설정한 서버 정보는 retrofit2로 API통신을 할때, 사용된다.

    file

빌드 설정

  1. build.gradle(Project)
    아래와 같이 설정 파일을 작성한다.

    buildscript { ext.kotlin_version = '1.6.10' //Flex최신버전 미지원으로인한 버전향상(22.02.17) ext.room_version = '2.4.1' //Flex최신버전 미지원으로인한 버전향상(22.02.17) repositories { google() mavenCentral() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:7.1.0' // Android Gradle Plugin (AGP) classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } jcenter() } } task clean(type: Delete) { delete rootProject.buildDir // 빌드 할 때 생성되는 build 디렉토리 삭제 }
    file
  2. build.gradle(Module)
    아래와 같이 설정 파일을 작성한다. namespace와 applicationId는 프로젝트의 패키지명으로 설정한다. defaultConfig의 versionCode와 versionName으로 앱 버전을 설정 할 수 있다. (admin에서 등록할때 앱 버전 필요) dependencies 블럭에 있는 코드들은 캐모마일 모바일에서 제공하는 모듈들의 dependency이다. 실제로 사용할 모듈들의 dependency들만 추가해주면 된다. (전부 추가해도 무관하다.)

    apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { namespace 'com.ldcc.chamomileapp' compileSdkVersion 32 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.ldcc.chamomileapp" minSdk 26 targetSdk 32 versionCode 1 versionName "0.0.1" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildFeatures { viewBinding true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildTypes { release { minifyEnabled true // 난독화 유무 shrinkResources true // 리소스 축소 유무 debuggable false // 릴리즈 빌드에서 디버깅 유무 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 애플리케이션 프로젝트의 ProGuard 규칙 파일을 지정 buildConfigField "boolean", "IS_RELEASE_BUILD", "true" } debug { debuggable true minifyEnabled false shrinkResources false buildConfigField "boolean", "IS_RELEASE_BUILD", "false" } } } dependencies { // 프레임워크 라이브러리 implementation files('libs/flex_framework_1.0.2-release.aar') // Other Libraries implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.core:core-ktx:1.6.0' //1.3.2 -> 1.6.0변경(22.02.14) implementation 'androidx.constraintlayout:constraintlayout:2.0.4' // To solve Error : Cannot fit requested classes in a single dex file (# methods: 68724 > 65536) implementation 'com.android.support:multidex:1.0.3' // Kotlin Libraries implementation "org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}" // Activity Result Api implementation 'androidx.activity:activity-ktx:1.2.0-rc01' implementation 'androidx.fragment:fragment-ktx:1.3.0-rc01' implementation 'com.airbnb.android:lottie:3.5.0' // Room implementation "androidx.room:room-runtime:$room_version" // implementation 'com.google.firebase:firebase-messaging-ktx:24.0.0' testImplementation "androidx.room:room-testing$room_version" kapt "androidx.room:room-compiler:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-rxjava2:$room_version" implementation "androidx.room:room-guava:$room_version" implementation "androidx.room:room-ktx:$room_version" // Retrofit implementation 'com.squareup.retrofit2:retrofit:2.9.0' // Gson implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.google.code.gson:gson:2.9.0' // Moshi implementation 'com.squareup.retrofit2:converter-moshi:2.0.0' // Material Design implementation 'com.google.android.material:material:1.5.0' // biometric implementation 'androidx.biometric:biometric:1.0.1' // QR Code implementation 'com.google.zxing:core:3.3.0' implementation('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false } // Signature Pad implementation 'com.kyanogen.signatureview:signature-view:1.2' // Google Play Services implementation 'com.google.android.gms:play-services-auth:19.0.0' implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.0' implementation 'com.google.android.gms:play-services-maps:17.0.0' implementation 'com.google.android.gms:play-services-location:17.1.0' }

    file
    file

  3. settings.gradle
    pluginManagement, dependencyResolutionManagement 부분은 주석처리한다. (repositories 설정은 build.gradle에서 설정)

    file

  4. gradle-wrapper.properties
    distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip 로 설정

    file

버전 및 업데이트 정보

Q&A

  1. gradle 버전 불일치시 해결방법 (The binary version of its metadata is x.x.x, expected version is x.x.x)
    file
    • gradle-wrapper.properties 파일에서 gradle 버전을 7-2 zip 버전으로 설정한다. distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip

      file

    • build.gradle(Project) 파일에서 AGP 버전을 7.1.0 버전으로 설정한다. classpath 'com.android.tools.build:gradle:7.1.0'

      file
      특정 버전의 Gradle은 특정 버전의 AGP와 호환된다
      file
      관련 링크

  2. adaptive-icon 에러 (error: <adaptive-icon> elements require a sdk version of at least 26.)

    minSdk를 26으로 설정

    file
    file

  3. DayNight.NoActionBar 에러 (Error: resource style/Theme.Material3.DayNight.NoActionBar)

    implementation 'com.google.android.material:material:1.5.0' 추가

    file
    file

  4. Widget_AppCompat_Button_Borderless 에러 (Unresolved reference : Widget_AppCompat_Button_Borderless)

    res > value > themes.xml에 아래 코드 추가.

    <style name="Widget.AppCompat.Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless"/> <style name="Widget.AppCompat.Button.Borderless.Colored" parent="Base.Widget.AppCompat.Button.Borderless.Colored"/>

    file
    file

  5. migrate your project to AndroidX 에러 ('debugRuntimeClasspath' still contatins legacy support libraries, which may cause runtime issues.)

    gradle.properties에 android.enableJetifier=true 추가

    file
    file

  6. 리소스 파일 경로 참조 에러(Cannot Resolve Symbol 'R')

    실제 Activity가 있는 패키지명으로 리소스 파일 참조 경로를 변경해준다. ex) import com.ldcc.chamomileapp.R

    file
    file

  7. Exception: IllegalBlockSizeException 에러

    해당 오류는 KeyStore의 KeySize로 인해 발생하는 문제이다. 캐모마일 모바일에서는 기본 라이브러리로 제공되는 SharedPreference(android.content.SharedPreferences)를 커스터마이징하여, 값 저장과 불러오기 시 암복호화 기능을 추가한 라이브러리를 개발 했다. 하지만 키 값의 첫 문자가 대문자일 경우, 암호화 과정에서 오류가 발생한다. 따라서 캐모마일 모바일의 SharedPreference 클래스 메서드를 사용할 때, 키 값의 첫 문자는 반드시 소문자로 시작해야 한다.

    file

Last modified: 21 4월 2025