전체 글

전체 글

    [Android] 패키지가 잘못되어 앱이 설치되지 않았습니다. 해결

    상황 proguard 테스트중, 릴리즈 apk 설치시에만 '패키지가 잘못되어 앱이 설치되지 않았습니다' 문구 출력. debug apk는 설치 및 구동이 잘 되는 상황. 휴대폰 설정에서 출처없는앱 설치 허용하고, 구글 프로텍트는 해제한 상황이였는데 이랬음ㅁ 원인 unsigned apk여서.. proguard 설정 문제가 아니였다. 해결 서명한 apk를 빌드해서 설치하니 해결되었다. --- ...? 보안설정이 하나가 더 있나...? 뭐지...?;;;;

    Open Vpn 다중접속

    Open Vpn 다중접속

    이번 서버작업을 하면서 상용-개발서버의 vpn 두가지로 작업을 하게 되었다. 번갈아가면서 접속하며 작업하니 여간 불편한게 아니여서 구글링을 좀 해보게 됬고, 찾게 되었다. C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OpenVPN\Utilities에 있는 add a new tap-windows6 virtual network adapter를 관리자권한으로 실행시켜 이더넷 네트웤을 추가하면 위처럼 복수의 vpn에 접속할 수 있다.

    You've added another git repository inside your current repository.

    내부에 일부 디렉토리가 별도로 git init가 되어서 .git 폴더가 존재할때 발생한다. 해당 디렉토리까지 푸시를 하고 싶다면, 해당 디렉토리에 remote 저장소를 추가하던지 깔끔하게 .git 폴더를 밀던지 하면 된다. 신규 디렉토리를 커밋하는데 아래와 같은 문구가 출력되었다. hint: You've added another git repository inside your current repository. hint: Clones of the outer repository will not contain the contents of hint: the embedded repository and will not know how to obtain it. hint: If you meant to add a su..

    [Windows 10] WSL2 설치부터 AWS EC2 접속까지

    [Windows 10] WSL2 설치부터 AWS EC2 접속까지

    powershell을 관리자 권한으로 실행한다. DISM(배포 이미지 서비스 및 관리) 명령어로 Microsoft-Windows-Subsystem-Linux 기능을 활성화하고, VirtualMachinePlatform 기능을 킨다. $ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart $ dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 각 명령어 입력 후작업이 정상적으로 완료되었는지, 메시지를 꼭 확인한다. *관리자 권한으로 실행시키지 않았을 경우 실패 wsl2 linux 커널 업데..

    [PHP] Code Igniter에서 MySQL 사용

    [PHP] Code Igniter에서 MySQL 사용

    * 참고 -> (= Object Operator) : 객체 범위 내에서 객체에 접근하기 위해서 사용하는 오퍼레이터입니다. => (= Double Arrow Operator) : 배열의 키, 값을 할당할 때 사용하는 오퍼레이터입니다. DB conntect 위치 : conifg/database.php $db[’dbName’] = array( ... ) 꼴로 여러 커넥션을 만들 수 있음.커넥션의 각 값의 정보는 위 링크에 잘 나와있음. $active_group ='dbName'; 으로 기본 커넥션을 설정할 수 있음. $db['real'] = array( 'hostname' => '데이터베이스 서버 이름', 'username' => '사용자아이디', 'password' => '사용자비밀번호', 'database..

    [PHP] Code igniter MVC

    [PHP] Code igniter MVC

    Controller controllers폴더 내에 위치해야 한다. CI_Controller를 상속받는 클래스를 생성해 컨트롤러를 여러개 생성할 수 있다. class Practice extends CI_Controller { ... } 위의 경우는 https://YOUR_SERVER_ENDPONT_NAME/practice로 접근이 가능하다. 원래는 URL 중간의 index.php의 존재가 있었으나(이전 포스팅 참조), 세팅을 통해 URL 중간에서 제거할 수 있음(https://www.cikorea.net/bbs/view/lecture?idx=7073) 내부에 index() 함수 생성시 https://YOUR_SERVER_ENDPONT_NAME/practice로 접근하면 index()가 호출된다. index..

    [PHP] Code Igniter란?

    [PHP] Code Igniter란?

    Itroduce Code Igniter란, php기반의 오픈소스 프레임워크입니다. 또다른 php 기반 프레임워크로는 라라벨이 있습니다. java에 spring이 있다면, php엔 Code Igniter와 라라벨이 있죠. 현재까지도 활동하는 한국 사용자 포럼도 있으니, 궁금하시면 접속해 보세요! [커뮤니티 바로 가기] Application Architecture 1. index.php는 ci를 시동하기 위한 Front Controller로써, 기본적인 리소스들을 초기화 시킵니다. 2. Router는 각각의 http 요청이 어디로 연결되어 어떻게 수행되어야 하는지를 알려준다. (이 과정에서, 캐시파일이 있다면 실행 과정을 거치지 않고 브라우저에 캐시를 보낸다.) 3. Security는 controller가 ..

    [Kotlin] Android Room Database 기본 예제

    [Kotlin] Android Room Database 기본 예제

    저번에 SQLite 포스팅을 해놓고 Room database는 빼먹었더라구요. ㅎㅎ; 그래서 늦게나마 포스팅 해 보겠습니다. 아래 코드 예제는 인강을 들으면서 작성한 코드입니다. [전체 코드 보기] https://github.com/gr2nsky/fastCampus/tree/main/basic/calculator GitHub - gr2nsky/fastCampus Contribute to gr2nsky/fastCampus development by creating an account on GitHub. github.com room이란? 스마트폰에 내장된 DB에 데이터를 저장하기 위해 사용하는 ORM 라이브러리 입니다. room은 내부적으로 sqlite를 사용하지만, 이를 자바나 코틀린으로 매핑해 접근성과 ..

    [Kotlin]Android Firebase Cloud Message(FCM) - (1) Client

    [Kotlin]Android Firebase Cloud Message(FCM) - (1) Client

    이번 포스팅에서는 FCM을 사용하기 위한 Client 구현에 대해서 포스팅 해 보겠습니다. 1. FCM이란? Firebase Cloud Message의 약자로, 다양한 플렛폼에 메세지를 전송할 수 있는 메세징 솔루션입니다. 일부 기능을 위해선 유료로 이용해야 하지만, 대부분의 경우는 무료로 해결할 수 있습니다. Firebase에서 미들서버 역활을 하는데, 메세징 솔루션까지 제공하므로 개발자들은 서버를 직접 구축할 필요 없이 매우 편리하게 메세징 서비스를 구축할 수 있다는 장점이 있습니다. 거기에 애널리틱스를 통한 분석기능까지 동시에 사용할 수 있으니, Android application 개발에선 빠질 수 없는 요소이죠. 2. FCM 적용하기 2-0. Firebase console 설정 Firebase c..

    Android Log 라이브러리 Timber

    Android Log 라이브러리 Timber

    Kotlin으로 Log를 사용하면 [ Using 'Log' instead of 'Timbe' ]라는 문구를 확인할 수 있습니다. Timber는 다음의 장점이 있습니다. 1. 태그를 별도로 입력할 필요가 없다. 2. 릴리즈때 로그를 출력하지 않는다. 3. 충돌보고 라이브러리와 통합이 쉽다 사용법 app level gradle에 의존성을 추가 repositories { mavenCentral() } dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' } 초기화 Application 클래스의 omCreate()에 다음과 같이 입력합니다. *Application 클래스를 상속받는 클래스를 생성해 Manifest의 application 태그의 ..

    Android Log 라이브러리 Logger

    Android Log 라이브러리 Logger

    Logger란? Timber보다 가시성있고 이쁘게(?) 출력되는 로그 라이브러리 Logger입니다. 언제부턴가 코틀린으로 Log를 사용하다보면 Timber를 대신 쓰라고 메세지가 나와서, 다른 로깅 라이브러리가 있나 싶어 찾다 찾게 되었네요. 15년도부터 18년도까지 버전 릴리즈를 해왔고, androidx 지원을 위해 21년 2월까지 수정한 라이브러리입니다. timber보단 신뢰성이 높다고 할 순 없지만, 일단 비주얼이 굉장히 마음에 들어서 포스팅 해 봅니다. xml과 json 형식도 지원해주고 콜렉션 타입의 객체도 지원해 줘서 정말 편하기까지 합니다. 사용법도 정말 간단합니다. 사용법 의존성 추가 dependencies{ implementation 'com.orhanobut:logger:2.2.0' }..

    Android Proguard

    Android Proguard

    현재 라이브러리를 개발중에 있습니다. 공개 범위의 코드를 제외하고 소스노출의 최소화와 aar파일의 용량을 줄이기 위해서 프로가드를 사용하게 되었습니다. 적용하기위해 사용한 코드와 공부내용 포스팅 해보겠습니다. 1. Proguard란? 수행시기 - 릴리즈시 역할 1. 코드 난독화 2. 패키지 경량화 2. 사용하기 app level gradle 파일의 buildTypes태그에 다음과 같이 입력합니다. buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true proguardFiles getDe..

    [Kotlin] PhoneStateListener deprecated, TelephonyCallback로 대체하기

    [Kotlin] PhoneStateListener deprecated, TelephonyCallback로 대체하기

    Android12로 들어서며 PhoneStateListener가 deprecated 되었습니다. 이를 TelephonyCallbck으로 대체해야 합니다. private val mPhoneStateListener = object : PhoneStateListener(){ override fun onCallStateChanged(state: Int, phoneNumber: String?) { super.onCallStateChanged(state, phoneNumber) Log.d(TAG, "onCallStateChanged is listen changed state : $state") callStateIntent = Intent(applicationContext, CallHandleService::clas..

    [Kotlin] RecyclerView (3) - ItemTouchHelper로 Swipe event 구현

    [Kotlin] RecyclerView (3) - ItemTouchHelper로 Swipe event 구현

    RecyclerView 마지막 포스팅입니다. 왼쪽에서 오른쪽으로 스와이프를 하면 통화를, 반대로 오른쪽에서 왼쪽으로 스와이프를 하면 메세지 전송이 되도록 해보겠습니다. 필요한 과정 1. item_phonebook.xml 수정 2. ItemTouchHelper.callback 구현 ㄱ. 필수 메서드 구현 ㄴ. 보조 메서드 구현 3. Adapter에 ItemTouchHelper.callback 부착 구현 1. item_phonebook.xml 수정 이제 두가지의 레이아웃이 필요합니다. 스와이프 시킬 레이아웃은 이름과 전화번호부가 적혀있는 화면이구요, 스와이프 되면 이제 양 사이드에 문자 아이콘과 전화 아이콘이 있어야겠죠? 아이템 배치는 해주었고, 이것도 리스트 아이템이니 리스트 아이템 하나하나 마다 존재해야..

    [Kotlin] RecyclerView (2) - Filter와 SerachView로 검색기능 구현

    [Kotlin] RecyclerView (2) - Filter와 SerachView로 검색기능 구현

    RecyclerView 시리즈의 두번째 포스팅입니다. 이번엔 SerachView, Filterable 위젯을 사용해 검색기능을 구현해 보겠습니다. SerachView는 커스텀하기가 쉽지 않아 EditText로 직접 구현하는 경우도 굉장히 많습니다. 하지만 공식문서를 찾아보시면 생각보다 많은 속성이 있으니, 필요에 따라 쓰시면 되겠습니다. 정리가 잘 된 블로그가 있어서 링크 공유드립니다. https://landroid.tistory.com/5 SearchView, 속성 사용법 안녕하세요! Landroid입니다~! 보통 안드로이드에서 검색 기능을 구현할 때 많이들 사용하시는데요. 의외로 자료가 많이 없어 구현하는데 애를 먹는 뷰이기도 합니다. 그래서 오늘은 SearchView 사용 landroid.tisto..

    [Git] 실수로 삭제한 Local/Remote Branch 복구하기

    [Git] 실수로 삭제한 Local/Remote Branch 복구하기

    회사에서 작업을 하는 와중... 브런치가 하도 많이 정리를 했는데... 세상에 Remote로 퍼블리시도 하지 않고 오전 내내 작업한 로컬 브런치를 날려버렸지 뭡니까... 다행히 삭제한 뒤 긴 시간이 흐르지 않았고... 열심히 구글링을 시작합니다.. 식은땀을 뻘뻘 흘리면서 제발 살려달라고 빌면서 말이죠... 그리고 다행히 성공했습니다 ㅠㅠ git reflog를 입력해 내 작업의 히스토리를 로드한 후 삭제된 브런치의 가장 마지막 작업의 HEAD@{작업번호}를 아래처럼 입력합니다! git checkout -b '복구할 branch이름' HEAD@{작업번호} 그럼 기적적으로 해당 작업번호의 브런치로 checkout이 되게 됩니다. 사랑합니다 git...

    [Kotlin] ViewPager2 사용하기

    [Kotlin] ViewPager2 사용하기

    ViewPager는 RecyclerView adpater를 사용해 상당히 쉽게 구현할 수 있습니다. 이번 포스팅은 ViewPager를 구현해 배열에 저장된 image들을 슬라이드 해보겠습니다. 필요한 재료 1. 이미지를 출력할 ViewPager 2. image를 출력할 방법을 표현한 layout 3. 배열에 저장할 image들 4. 배열의 출력을 관리할 RecyclerView 재료 구현 1. 이미지를 출력할 ViewPager 2. image를 출력할 방법을 표현한 layout 3. 배열에 저장할 image들 private fun getAespaMembers(): ArrayList { return arrayListOf( R.drawable.giselle, R.drawable.karina, R.drawabl..

    [Kotlin] RecyclerView (1) - 기본 예제

    [Kotlin] RecyclerView (1) - 기본 예제

    새 시리즈 포스팅입니다. 기본 에제 - 좌/우 스와이프로 삭제/통화 걸기 구현 - 검색 구현 - AAC MVVM적용 이렇게 총 네편으로 포스팅 할 예정입니다. RecyclerView란? ViewHolder 패턴을 사용해 아이템 뷰를 재활용하는 리스트입니다. 리스트의 아이템이 1억개가 있다고 해도, 아이템 뷰를 일정 갯수로 유지하며 값만 바꿔 보여주는 것이지요. 사용자의 입장에선 1억개가 다 세팅되어 있는것 같지만, 사실 사용하는 아이템뷰는 극히 적고, 값만 바뀌어서 재배치 되는거죠. 이를 통해 리스트의 규모가 클수록 사용자의 사용환경을 쾌적하게 만들어 주는데 굉장한 효과를 발휘합니다. 추가적으로, RecyclerView는 좌우 스와이프 및 검색을 위한 필터 등의 추가기능을 부착하기 굉장히 쉽습니다. 재료..

    Android Background Service 작업 제한

    Android Background Service 작업 제한

    0. 목차 Ⅰ. 개요 0. 서론 1. Service와 Thread의 차이 2. Service의 종류 3. Service의 제한 Ⅱ. Broadcast 제한 Ⅲ. Background 작업 제한 1. Background. 실행 제한 2. Backround에서 Activity 시작에 대한 제한 사항 Ⅰ. 개요 0. 서론 필연적으로 Background Service는 사용할 수 밖에 없습니다. 하지만, 이전과는 다르게 Android는 Background Service에는 호의적이지 않습니다. 업무와 관련되어서 자세히 찾아보게 되었고, 이를 공유하고자 정리해서 포스팅합니다. 1. Service와 Thread의 차이 Service란 Background에서 오래 실행되는 작업을 수행할 수 있는 Application ..

    [Kotlin]local properties에 변수 저장하기

    [Kotlin]local properties에 변수 저장하기

    Local properties에 변수를 왜 저장해야 하나요? 외부에 노출되면 안되는 중요한 자료들(인증받은 API Key, 메일을 보내기위한 메일계정 등)은 코드상에 하드코딩하게 되면 의도치않게 git으로 공유될 수가 있으므로, 이를 방지하기 위해 사용합니다. gitignore에는 local.propeties에 등록이 되어 있거든요. 기본으로 있다면 상관이 없지만, 만약 없다면 꼭 추가해 주세요 ㅎ Local properties에 변수를 저장하면 어떻게 되나요? Local properties에 변수를 저장하게 되면, app level gradle의 defaultConfig 태그 내에서 불러올 수 있습니다. 그렇게 되면, 프로젝트를 빌드할 때 BuildConfig 클래스에 해당 값이 추가되어 프로젝트에서 ..