Android/Android
![[Android] Unity와 Android 연동하기 | UnityPlayerActivity as subView](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrFkiR%2Fbtr4DtYeDrd%2FNKnqwPlH98jLWy8ihXwyD1%2Fimg.png)
[Android] Unity와 Android 연동하기 | UnityPlayerActivity as subView
1. Unity Hub 다운받기 해당 링크에서 다운 받는다. 퍼스널 라이센스를 활성화 시켰다. 그냥 무료버전은 없는건가…? new project를 눌러보자 프로젝트가 생성되었다. 곧 각 항목에 대해 자세히 알아보도록 하자. 2. 프로젝트에 안드로이드 추가하기 맥OS 기준) file > Build Settings 플랫폼 선택에서 안드로이드가 빠져있었다. → 다운받지 않았기 때문 → 다운 받아주었다. 다운 받은 후 안드로이드를 선택하고 build switch를 눌러주면 위와 같이 유니티 로고가 안드로이드 쪽으로 이동한다. (프로젝트 한번 껐다 켜니까 제대로 적용이 되었다.) 3. 관련 설정 export 하기 전에 Version : 1.0 Scripting Backend : IL2CPP Target Archi..

내 프로젝트와 Firebase 연동하기
1. Firebase 사이트로 이동한다. 링크 2. 시작하기를 누른다. 3. 프로젝트 만들기를 클릭한다. 4. 프로젝트의 이름을 입력한다. 각 화면의 안내에 따라 프로젝트를 생성하면 된다. 5. 프로젝트 생성이 완료 되었으면 firebase를 추가한다. 연결하려는 프로젝트는 Android App이기 때문에 해당 아이콘을 눌러준다. 5-1. 앱 등록 화면 패키지 이름 : 해당 프로젝트의 패키지 이름을 넣으면 된다. AndroidManifest.xml 에서도 확인할 수 있다. 5-2. 구성 파일 다운로드 후 추가 화면 안내하는 대로 따라하면 된다. 5-3. Firebase SDK 추가 프로젝트 수준 build.gradle buildscript { ext.kotlin_version = "1.6.10" repo..
![[Android] Hilt 적용해보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0tIIC%2FbtrVnX17xa9%2F322XwiDqkwbjh8TC3EE1B1%2Fimg.png)
[Android] Hilt 적용해보기
들어가며 DI (Dependecy Injection)에 대해서는 어느정도 들어보거나 또는 알 것이라고 생각한다. 한번 더 짚고 넘어가자면 의존 관계에 있는 클래스의 객체를 외부로부터 생성하여 주입받는 것을 의미한다. DI, 의존성 주입 컴퓨터를 만들기 위한 클래스를 설계한다고 생각해보자. (getter, setter 및 생성자는 생략한다.) CPU가 필요하고 RAM, 저장장치(ROM)도 필요하겠지? public class Cpu { String name; String company; } Computer 클래스는 이렇게 구성된다고 치자. public class Computer { int ram; int ssd; Cpu cpu; } 이때, Computer는 Cpu 클래스를 의존하고 있다. 의존이란 쉽게 말해..
![[Android] 부팅 시 앱 실행하기 | Android 10+ Application startup on BOOT](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmeFeX%2FbtrMEtnxICK%2FII80irnKZ226uL41Pv35f0%2Fimg.png)
[Android] 부팅 시 앱 실행하기 | Android 10+ Application startup on BOOT
들어가며 부팅 시 앱이 실행 되었으면 좋겠다는 요구 사항이 들어왔다. 예전에 부팅 되었을 때 관련 데이터를 삭제하는 기능을 잠깐 검토 했던 기억이 있어서 금방 하겠거니 생각했다. 그렇게 영원한 나의 친구이자 스승인 구글에 관련 기능을 검색했다. 1. AndroidManifest.xml 에 권한을 명시하고 2. Receiver를 만들고 class DeviceBootReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { val action = intent?.action if (action.equals(Intent.ACTION_BOOT_COMPLETED)){ val appIntent = Intent..

LeakCanary 사용하기
들어가며 지난번의 메모리 누수 이슈로 원인을 찾아 헤매다 LeakCanary를 알게 되었다. 안드로이드 스튜디오에서 제공하는 프로파일러에서도 memory leak 을 잡아 낼 수 있는데 개인적으로 사용하기가 어려웠다. 그래서 따로 사용하는 법(?) 이해하는 법을 학습했지만 문제를 해결하기 위한 원인을 찾아내는 데에는 한계가 있었다고 생각한다. 그래서 LeakCanary를 사용해보고자 하였다. 메모리 누수 memory leak A small leak will sink a great ship. - Benjamin Franklin 쉽게 얘기해서 우리는 먹으면 싸야한다. 근데 그게 제때 배출이 안되고 안에서 자꾸 쌓인다고 생각하면 어떤가? 탈이 난다. 더이상 참조되지 않는 것들은 가비지 컬렉션에 의해 수거되어야..

fastlane 으로 Android 앱 배포 쉽게 하기 (feat. windows)
들어가며 개발이 어느정도 마무리가 되면..(끝은 없으니까요 ^_ㅠ?) 사용자를 만나기 위한 준비를 해야한다. 여차저차 준비를 하고 내 자식같은 아이가 세상에 나오면.. 높은 확률로 다시 고쳐야할 일이 생긴다. 수정하고 내놓고 수정하고 내놓고.. 안드로이드 앱의 경우 출시 및 출시 준비 과정은 다음과 같다. (간략하게 작성한것으로 상이할 수 있습니다.) 1. 출시 전 속성 지정 및 설정 - debuggable = false (안하면 앱이 안올라가는거 아시죠) - app signing (빌드할 때 보통 자동으로 되지만 일단 넣었다.) - versionCode++ - versionName 지정 2. buildType 지정 후 build 진행 3. play console 에서 업로드 진행 4. 내부 테스트용 앱..

Android Jetpack Compose 맛보기
Android Jetpack Compose 네이티브 Android UI를 빌드하기 위한 최신 도구 키트 Jetpack Compose 선언적 UI 방식 💡 상태를 UI 로 변환한다. UI는 변경할 수 없고 한번 생성하면 업데이트가 불가능하다. 앱 상태가 바뀌면 새로운 상태를 새로운 표현으로 변환하는 것 ⇒ 동기화 문제가 완전히 해결된다. 문장을 읽었을 때는 상태가 바뀌면 다시 그림을 그리겠다는 것으로 이해되어 비효율적이지 않을까 생각했다. 하지만 compose 는 지능적이기 때문에 변경되지 않은 요소의 작업은 건너 뛴다고 한다. 따라서 코드는 특정 상태에 대한 UI 형태를 설명할 뿐 생성 방법을 지정 하지는 않겠다는 것이다. Declarative UI Toolkit 요즘의 앱들은 데이터가 동적이고 실시간으..

안드로이드 애플리케이션 설계 패턴
MVC 패턴 💡 애플리케이션 구조를 Model, View, Controller 세개의 측면으로 관심사를 분리한다. 개발을 배울 때 가장 먼저 배운 패턴이다. 그렇기 때문에 이해하기도 가장 쉬웠다고 생각한다. 안드로이드에서 activity, fragment 가 view 역할을 한다. 동시에 controller 의 역할을 하기도 한다. 장점 직관적이다. 위에서 이해하기 쉬웠던 이유가 바로 이 장점 때문이 아닐까? 코드를 파악하기 쉽다. 단점 (안드로이드에서는) 위에서 말했듯 activity, fragment 가 뷰와 컨트롤러의 역할을 겸하다 보니 앱의 규모가 커지면 수천줄의 코드가 작성되어 유지보수가 힘들어진다. 컨트롤러는 뷰와 모델에 의존적이고, 뷰는 모델에 의존적이기 때문에 결합도가 높아 유닛 테스트가 ..
![[kotlin] 코틀린 기초 문법 다지기 - 2. class](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPPWs3%2FbtrFVunJfv9%2FMHQgClnsUoQULKDPn9GgU0%2Fimg.png)
[kotlin] 코틀린 기초 문법 다지기 - 2. class
해당 강의를 들으며 작성된 것입니다. [무료] 코틀린 3강으로 끝내기 feat. 안드로이드 개발 - 인프런 | 강의 3강으로 짧게 끝내는 코틀린 문법! 코틀린 기초 문법과 안드로이드 기초 프로그래밍은 물론, 직접 안드로이드 앱도 만들어보세요!, - 강의 소개 | 인프런... www.inflearn.com Class 👉🏻 코틀린은 자바와 달리 클래스 이름과 파일의 이름이 달라도 된다. 👉🏻 한 파일 안에 여러 클래스를 생성할 수 있다. 기본 형태 👉🏻 코틀린은 new 키워드가 없다. class Human { val name = "spin" fun eatingCake(){ println("This is so yummy") } } fun main(){ val human = Human() human.eating..
![[kotlin] 코틀린 기초 문법 다지기 - 1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwRe7V%2FbtrD5SW0KbJ%2FrxvPkZbBZJcLjJTymezx3k%2Fimg.png)
[kotlin] 코틀린 기초 문법 다지기 - 1
해당 강의를 들으며 작성된 것 입니다. [무료] 코틀린 3강으로 끝내기 feat. 안드로이드 개발 - 인프런 | 강의 3강으로 짧게 끝내는 코틀린 문법! 코틀린 기초 문법과 안드로이드 기초 프로그래밍은 물론, 직접 안드로이드 앱도 만들어보세요!, - 강의 소개 | 인프런... www.inflearn.com 함수 파라미터와 리턴 타입이 없을 때 fun helloWorld(){ println("hello world!") } 자바의 void 와 같다. 아무것도 리턴하지 않는 것처럼 보이지만 사실은 Unit을 리턴하고 있다. 위에 쓰인 것 처럼 생략해도 무방하다. fun helloWorld() : Unit { println("hello world!") } 파라미터와 리턴 타입이 있을 때 '변수 이름 : 변수 타..
![[Android] SharedPreferences 와 KeyStore](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeE8tmR%2FbtrBN5MpCgb%2FGg2EHkQCqECLc4ZDEUOm8k%2Fimg.png)
[Android] SharedPreferences 와 KeyStore
해당 글을 참고했습니다. 안전하게 민감정보 저장 이슈 해당 게시글은 Android 개발자에게 해당되는 이야기다. 민감정보에대해 개발을 하면서 서비스의 운용을 위해 필요한 정보를 받는 것은 자연스러운 일이다. 그중 대표적으로 비밀번호를 말할 수 secu-lee-ty.tistory.com 들어가며 다들 그렇겠지만 전역적으로 쓰이는 정보에 한해서는 SharedPreferences 를 이용해 정보를 저장해왔을 것이다. 나의 경우 로그인기능을 개발하면서 사용자 편의를 위해 로그인 정보 저장 기능을 만들고자 했었다. 그러려면 아이디와 비밀번호 모두를 SharedPreferences 에 저장해야하는데 비밀번호를 평문으로 저장하는 것은 너무 위험하고.. 로그인 정보를 서버에 전송할 때 암호화 된 비밀번호를 전송하니 암..
![[Android] Google Play Developer API으로 앱 출시하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTj7Pm%2FbtrBOT4gO1y%2F6nr1cmfmkicsS4VwKY6FFK%2Fimg.png)
[Android] Google Play Developer API으로 앱 출시하기
들어가며 앱을 마켓에 배포하고 나서 앱이 업데이트가 되면 사용자들에게 업데이트를 안내해야한다. 다 그런건지는 모르겠지만 앱을 다운받으면 자동 업데이트에 체크가 되어있긴 하던데.. 자동 업데이트를 선호하지 않아 해제해놓는 사용자가 있을 수 있기 때문에 인 앱 업데이트를 구현하고자 했다. 공식문서를 참고하다 우선순위를 지정할 수 있다는 것을 보게 되었다. Google Play Developer API 말 그대로 구글에서 제공하는 API로 게시 및 앱 관리 작업을 실행할 수 있다고 한다. 👉🏻 Subscriptions and In-App Purchases API : 인 앱 구매와 정기 결제 관리 👉🏻 Publishing API : 앱 업로드 및 게시, 기타 게시 관련 작업 실행 Publishing API 앱 ..