react native gps foreground service - android, kotlin (1)

react native 에서 gps 트래킹을 해야한다. 앱이 백그라운드에 있어도 동작하도록 네이티브 모듈을 만드는 것만 해도 많이 안하다보니 까다로운데 gps + 서비스 동작을 해야한다니. 기본으로 돌아가기로 했다. 일단 안드로이드 앱에서 GPS 트래킹하는 코드부터 시도해보았다. ### MainActivity.kt ``` package com.example.gpstracker import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.location.LocationListener import android.location.LocationManager import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.core.app.ActivityCompat import com.example.gpstracker.ui.theme.GpsTrackerTheme val T

Modularization of react NativeModules


써드파티 SDK를 붙이는데 해당 업체에서 npm package 가 아닌 각 OS의 SDK 와 react native 코드를 주면서 앱에 내장하라는 가이드를 받았다.

물론 이를 그냥 앱에 넣을 수는 없어서 package 로 분리하는 작업을 하였다. 이 작업을 하며 겪었던 트러블슈팅을 정리하고자 한다.

# Android

## 자바와 코틀린간 패키지 참조 불가
build.gradle (app) 에 하단 설정 추가
```
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
```

## Could not find com.this.repo.

모듈의 example 프로젝트에서 받고자하는 sdk 라이브러리가 없다는 에러. example 프로젝트의 build.gradle 에 아래 코드를 추가하여 필요한 sdk 를 다운받을 수 있도록 한다.

Can’t find module in example project, and I fixed it adding below codes in build.gradle (example)

```
allprojects {
    repositories{
        maven { url 'https://repository.something/‘ } // change this line to download the sdk you aimed
    }
}
```

##  Workspaces can only be enabled in private projects.

모듈을 붙이고자 하는 프로젝트는 프라이빗 프로젝트이기 때문에 npm 에 퍼블리쉬되지 않은 패키지의 경우 package.json 에 "private:true" 를 추가해야 한다.

Because my project is “private:true”, If I want to add non-published package, the package should be “pritvate:true” in package.json



# ios

## xcframework 이란?
받은 sdk 중 ios 부분은 xcframework으로 이루어져있었다. 찾아보니 설명은 다음과 같다
XCFramework 번들은 Xcode로 만들어진 바이너리 패키지이며 다양한 플랫폼에서의 빌드 시 필요한 프레임워크와 라이브러리들을 포함한다.
그러므로 xcframework 은 arm64, x86_64 아키텍쳐를 모두 지원할 것으로 판단됨.
An XCFramework bundle, or artifact, is a binary package created by Xcode that includes the frameworks and libraries necessary to build for multiple platforms
So, xcframework means support arm64 and x86_64 both




댓글

이 블로그의 인기 게시물

Operating System Concept

카카오 내비 리엑트 네이티브 모듈 만들기 ft.코틀린

Operating System Concepts 9th