Android, iOS 앱을 다른 계정으로 이전하는 방법
Android 및 iOS 앱 이전을 신청하기 위해서는 먼저 이전할 계정의 개발자 등록하여 미리 준비해야 한다.이 과정에서 일주일 이상 걸리는 경우도 있기 때문에 이전이 필요한 시점보다 미리 준비하는 것이 좋겠다.iOS는 앱 이전 신청 즉시 이전이 완료되는 것을 확인할 수 있었고 Android는 2일 이내 완료 된다고 안내에 나와 있었지만 실제로는 몇시간 이내...
안드로이드 키보드에서 gif 이미지 전송
ProblemAndroid 7.1(API 레벨 25) 이상에서는 안드로이드 키보드에 이미지 및 리치 콘텐츠를 제공하고 있다.채팅 애플리케이션 등에서 안드로이드 키보드에서 지원하는 gif 등의 이미지를 선택하는 경우 바로 전송할 수 있어야 한다.또는 앱이 지원하지 않는 경우 지원하지 않는 기능이라고 표시해주면 더 좋겠다.하지만 앱의 별도 구현이 없는 경우 해당 기능이 동작하지 않거나 앱이 해당 이미지...
react-native 프로젝트 생성 후 안드로이드 빌드 오류
Problem최근 react-native^0.63를 이용하여 새 프로젝트 생성 하고 안드로이드 환경의 앱을 실행할 때 아래와 같이 NoClassDefFoundError와 관련된 에러를 경험했다.npx react-native initerror Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup. Run CLI with --verbose flag for more details.Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081java.lang.NoClassDefFoundError: Could...
안드로이드에서 ANDROID_ID와 관련된 문제
Problem안드로이드에서 고유 ID를 확인하기 위해서 ANDROID_ID를 이용할 수 있다.만약 암호화 관련 처리가 필요한 경우 키의 일부를 ANDROID_ID를 조합하여 사용하고 있는 경우 문제가 발생할 수 있다.나는 sqlcipher 처리 관련된 처리에서 문제를 경험했었고 아래와 같이 file is not a database오류가 발생했었다.Fatal Exception: java.lang.RuntimeException: Unable to create application ...: net.sqlcipher.database.SQLiteException: file is not...
안드로이드 SwitchPreference에 커스텀 스위치 스타일 적용
Problem안드로이드에서 설정화면의 스위치를 구현하기 위해서 SwitchPreference1를 사용할 수 있는데 스위치(Switch)의 스타일을 수정하고자 할 경우 스타일이 적용되지 않는 문제가 있었고 이를 해결하고자 한다.Solution스위치 버튼의 스타일을 적용하기 위해서 SwitchPreference를 새로 구현하여 적용하였다. setChecked는 외부에서 기본 스위치의 선택 상태를 변경하고자 할 경우 사용하게 되므로 별도 구현이 필요했다.SwitchPreferenceExtend.ktclass SwitchPreferenceExtend : SwitchPreference { constructor(context: Context?,...
APNG 파일 포맷과 관련 안드로이드 라이브러리
ProblemAPNG(Animated Portable Network Graphics)는 이름에서 알 수 있듯이 PNG 포맷을 확장한 이미지 파일 포맷으로 하위 호환성을 유지하면서 GIF같은 애니메이션 구현이 가능한 포맷이다1. 가장 큰 장점으로 하위 호환성이 유지된다는 것인데 APNG를 지원하지 않는 뷰어에서는 PNG처럼 동작하게 된다. 하위 호환성을 유지하는 방법으로 첫번째 프레임은 기존 PNG 정보를 보여주고 나머지 프레임에 애니메이션 프레임들이...
Java의 AsyncTask를 Kotlin의 coroutine으로 변환
Problem기존 Java로 작성된 코드를 Kotlin으로 변환할때 어떻게 하면 더 Kotlin 스타일에 맞게 변환할 수 있을까하는 고민을 하게 됐다. 동일하게 AsyncTask로 변환 할 수도 있지만 조금 더 Kotlin스타일로 변환 할 수 있는지 확인해 보고자 한다.AsyncTask.execute(new Runnable() {@Overridepublic void run() { ...Solutioncoroutine은 Kotlin 1.3 버전에서 추가되었다. 그 이상 버전을 사용하는 경우만 해당한다....
Oilnow







Based on Big Data Analysis and Algorithm Application, the app automatically recommends the closest and cheapest gas station near my location. This app helps you save on fuel costs by analyzing oiling patterns.While I’m working on this project, I understood the technology to recognize the direction through the coordinates, the...
Oilnow owner



This app can be used as a push notification to see price changes at nearby gas stations.The app is available for weekly price trend in the list.While developing this app, I knew how to focus quickly. And I was able to test my maximum performance.
안드로이드에서 홈 화면 바로가기 생성
Problem안드로이드에서 앱 설치 후 바탕화면(런처)에 앱 아이콘을 표시하고자 한다.SolutionAndroid 8 Oreo (API 26)이하에서는 다음 방법을 사용할 수 있다.private fun addShortCut(context: Context) { val shortcutIntent = Intent(Intent.ACTION_MAIN).apply { addCategory(Intent.CATEGORY_LAUNCHER) setClassName(context, javaClass.name) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) } sendBroadcast(Intent().apply { putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent) putExtra(Intent.EXTRA_SHORTCUT_NAME, resources.getString(R.string.app_name)) putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.mipmap.ic_launcher)) putExtra("duplicate", false) action = "com.android.launcher.action.INSTALL_SHORTCUT" }) val...
안드로이드에서 루팅된 디바이스 확인 코드
Problem루팅된 디바이스에서 앱이 실행 될 경우 정적 분석이나 코드 변조, 임의로 코드의 흐름을 조작하는 등 보안 문제를 일으킬 수 있다. 이를 방지하고자 루팅된 디바이스 실행 여부를 확인하는 코드가 필요하다.Solutionprivate fun isRootedDevice(): Boolean { val buildTags = Build.TAGS if (buildTags != null && buildTags.contains("test-keys")) { return true } if (File("/system/app/Superuser.apk").exists()) {...
Sweetco




Rental car price comparison web application and mobile app.Stabilization and upgrade works. Bulk push feature upgrades and many service bug fixes.I developed for the latest os, bug fixes, app updates and optimizations.I was able to understand the whole used car brokerage business through this project.
안드로이드 OS 알림 설정 확인
Problem안드로이드에서 서버와 앱에서 별도로 푸시 알림을 제어할 수도 있지만, OS 설정을 통해서 푸시 수신여부를 확인할 수도 있다.OS에서 푸시 설정을 꺼놓은 경우 푸시를 수신할 수 있는 방법이 없으므로 사용자에게 어떤 상태인지 안내해줄 필요가 있다.OS에서 푸시 설정 상태를 확인하는 방법을 정리하여 공유한다.Solution아래처럼 OS에서 푸시 설정이 활성화 상태를 확인할 수 있다.NotificationManagerCompat.from(context).areNotificationsEnabled()만약 푸시 사용이...
빌드속도를 높여주는 안드로이드 gradle.properties 설정
Solution# memory allotted to JVMorg.gradle.jvmargs=-Xmx5120m# configure on demandorg.gradle.configureondemand=true# parallel buildsorg.gradle.parallel=true# build Cacheandroid.enableBuildCache=true# gradle cachingorg.gradle.caching=true
네이버 네아로 로그인시 user_cancel 에러 해결 방법
Problem네이버 SDK를 이용하여 로그인을 구현할 때 네이버 앱이 설치되있지 않은 경우에서 로그인 후 “user_cancel” 에러가 나오는 경우가 있었다.재현이 가능한 특정 상황에서 나오는 문제는 아니고 여러번 시도하다보면 가끔 또는 자주 발생하기도 했다.네이버 개발자 포럼을 찾아보니 이와 같은 어려움을 겪고있는 개발자들(1,2, 3)이 많았지만 이상하게도 네이버측에서는 답변이 없었다. 여기에서는 확인해보겠다는 답변이 있지만 아직...
Wegen Scan



Wegen is a cryptograph wallet based on a block chain system. It includes the activation function using 3D security label made with ultra-thin nano process.If you scan the QR code of the G-Mov attached to the purchased product with the Wesen Scan app, you can redeem the coin for a...
CoordinatorLayout and AppBarLayout Always elevation in Android
Problem안드로이드에서 CoordinatorLayout에 구현된 AppBarLayout의 경우 AppBarLayout가 축소되는 경우 그림자와 함께 elevation 효과가 적용되는데 디자인에 따라 확장된 상태에서도 elevation의 적용이 필요한 경우가 있다.Solution400: Invalid request
Fivesense
Apps that could host the application on a web-based with native code from Android(Java) and iOS(Swift and Objective-C), and registered it in the Google Play and Appstore.While I’m working on this project, I was able to better understand establish the procedures for iOS Appstore registration. I was able to speed...
Non-Swipeable View Pager in Android
Problem안드로이드에서 ViewPager와 TabView를 작업할 때, 특정 뷰에서는 swipe 기능을 비활성화 할 필요가 있는데 이때 전체 또는 선택적으로 Non-Swipeable 기능을 적용할 필요가 있다.Solution400: Invalid request
안드로이드 net::ERROR_CLEARTEXT_NOT_PERMITTED 에러 해결방법
Problem안드로이드 P(Android 9.0 (API level 28)) 부터 cleartext를 요청하는 기능이 기본적으로 비활성화 되었다. 타깃 SDK를 28이전으로 사용했다면 상관없지만 업데이트 후 문제가 발생할 수 있다.Solution400: Invalid request
CLET






CLET is a powerful cryptocurrency wallet and an easy ICO platform.Blind investment for token sales and ICO is coming to an end.Now you can raise profit with judgements and investments based on practical information.It is important for ICO projects to attract new investors. Entry barriers for the new investors should...
안드로이드 앱 버전 체크, 스토어 연결
Problem앱에서는 현재 앱이 최신 버전인지 여부를 확인할 필요가 있다. 안드로이드 앱 기준으로는 버전코드(Int)가 있어서 이전 버전과의 단순한 숫자 비교로 구분해도 되지만 사용자가 보기에 직관적이지는 않다.또한, 하나의 백엔드 인터페이스를 통해서 iOS와의 버전 확인을 일관성 있게 유지하기 위해서는 버전명(ex: 1.0.0)으로 버전을 확인할 수 있는 방법이 필요하다.작성한 코드는 버전명 1.0.0과 1.0.1을 비교할 때...
Simple to use customizable Android Tooltips
Problem안드로이드 툴팁에 필요한 일반적인 클래스를 작성했다.listener를 추가하면 이벤트 처리 및 여러 툴팁이 순차적으로 보이도록 구현할 수 있다.Solution400: Invalid request
Update your app to comply with Google Play Permissions policy
ProblemHello Google Play Developer,In October, we announced updates to our Permissions policy that will limit which apps are allowed to request Call Log and SMS permissions. This policy will impact one or more of your apps.Only an app that has been selected as a user’s default app for making calls...
An Android text view with change animation
Problem안드로이드에서 TextView를 이용해서 숫자가 바뀌는 애니메이션 효과를 구현하고자 한다. 기존에 https://github.com/robinhood/ticker 같은 훌륭한 라이브러리가 있지만 빠르게 숫자를 전환하는 효과를 구현하지는 못하고 이 라이브러리를 소스를 수정하는데에는도 구조적인 한계가 있었다.Solution400: Invalid requestConclusion단순히 텍스트가 빠르게 바뀌는 효과만을 구현한 것이라 스크롤되는 등 자연스럽게 바뀌지 않는 문제가 있는데 추후 구현으로 남겨둔다.
Resource NotFoundException in Android
Problem구현 안드로이드 4.4.4 이하에서 백터 리소스 포멧을 지원하지 않아서 abc_ic_menu_overflow_material.xml에서 Resource NotFoundException이 발생할 수 있다.Solution여기를 참고하여 setCompatVectorFromResourcesEnabled 를 설정하는 방법도 있지만 그렇게도 해결이 되지 않을 때에는 아래와 같은 문제일 수도 있다.400: Invalid request
Remove trailing zeros in Kotlin
ProblemFloat나 Double 데이터 타입을 String으로 변환 시 1.0 등과같이 정수형이나 1.23000 등 소수점 이하의 범위에서 표현되는 0은 String으로 변환시 표시가 불필요 하기때문에 제거할 필요가 있다. 1.0은 “1”로 1.23000은 “1.23”으로 표시할 방법을 고민해봤다.Solution400: Invalid request
Textview to Drawable on Android
Problem안드로이드에서 TextView 의 내용을 Drawable 객체 또는 Bitmap으로 변환해서 사용해야 하는 경우가 있다. 이런 경우는 드물긴 하는데 제 경우에는 외부 라이브러리를 사용하고 해당 라이브러리 코드가 수정이 어려운 상태에서 Bitmap 객체를 입력으로 사용해야 되는 경우였다.Solution400: Invalid requestConclusion결과적으로 Canvas에 그리는 간단한 코드가 되어버렸지만 해결 방법을 찾는 과정은 쉽지 않았다. 그리고 찾는 과정에서...
안드로이드 APK 분석 방법
ADBADB 파일 경로는 안드로이드 스튜디오를 설치하고 MAC 기준으로 /Users/[USERID]/Library/Android/sdk/platform-tools 에서 확인할 수 있다. 원하는 APK를 얻고자 한다면 스토어 앱을 통해 앱을 설치한 후 아래 과정을 통해 APK를 받을 수 있다.$ adb shell pm list packages -f -3위와 같이 실행하면 연결된 기기에 설치된 앱 들을 경로와 함께 확인할 수 있다. -3...
Sendlike





Developing a dating app that open patterns that users have given scores.It is a dating app that supports precise matching based on data by disclosing user’s score pattern. Using the matching data from this app, you can create interesting new service.While I’m working on this project, I understood the techniques...
FastOrder




FastOrder is an online order service using a smartphone. It also supports application for tablets that can be used in stores. This service can manage customers more efficiently without significantly changing existing store ordering system. I participated in ideation of service, service planning, design concepts, and prototyping. I have experienced...
Myriels



The network map for your mobile contacts. The network map would be a visual guideline on designing your contact map. I implemented wi-tag feature on the network map. A Wi-tag is an anonymous tag that helps you better understand people on your contact map.While I’m working on this project, I...
RisingStar



It is a personal broadcasting service that supports live streaming. It is implemented as Android native using Kotlin. I have experienced with live streaming back-end building and protocol integration through this service.While I’m working on this project, I understood the streaming service integration technology, live streaming technology and troubleshoot streaming....
T-messenger


It is a mobile messenger for business use by the Oman government. The project uses WebRTC technology. I did the optimization work on this project for various network environments.While I’m working on this project, I understood how to troubleshoot WebRTC clients for various network environments.
Ready U




An Android application that connects with people going to ski resorts. This app includes matching people, chatting, bulletin boards, and skiing skills.While I’m working on this project, I understood effective user matching techniques, user-friendly UI, UX to improve retention.
CashFeed



CashFeed is a mobile flyer service that analyzes user patterns based on your location and recommends nearby stores. This app allows users to redeem points when they see the ad. The user can accumulate points and exchange them for goods.While I’m working on this project, I understood Tinder-like UI development...
MeBuy



An Android application that curates PPL videos for real purchasing. Implemented hybrid application technology, video and content management technology.While I’m working on this project, I understood the industry-wide trends related to PPL and video commerce.
OTT(Over The Top) Service; Mug



This app is an Android application that watches movies and TV. This app can be viewed or streamed online. The app implemented location aware technology using Wifi and multi-format streaming video playback technology.While I’m working on this project, I understood location recognition technology and AP authentication method through Wifi.
Smart Tape Management; Jenda



An Android application that manages measurement by communicating with Smart Tape via Bluetooth. The app can connect with smart tapes to view, organize and share size data. Dimension management, Body shape management and smart tape measure data calibration algorithm added in Phase 2.While I’m working on this project, I understood...
Comgree




A messaging application for teams. The service is available online or on a standalone. Implemented in Java a Messaging Application which performs real-time messaging and chat for team. Along with three other team members who wrote the server, iOS and web application.
T-messenger





It is a mobile messenger for business use by the Oman government. The project uses WebRTC technology. I did the optimization work on this project for various network environments.While I’m working on this project, I understood how to work with foreigners and teach the skills.
Doctor Implant




Implemented in Node.js Back-end Service and Back Office which supports API and consults management. Implemented in Java an Application which performs chat and consultation with dentists. Lead engineer on this product.안드로이드 앱을 이용해 치과 상담을 할 수 있는 O2O 서비스. 기존 스킨닥 서비스를 변형하여 치과(임플란트)에 맞게 재 패키징한 제품.
SkinDoc




Implemented in Node.js Back-end Service and Back-office which supports API and consults management. Implemented in Java an Application which performs chat and consultation with dermatologists. Lead engineer on this product.안드로이드 앱을 이용해 피부과 상담을 할 수 있는 O2O 서비스. 서버와 관리툴(API, 상담, 채팅, 관리 기능 등) 개발.