안드로이드 11 버전 이상에선 무선 디버깅을 공식적으로 지원하는 것으로 알려져있다.

하지만 그 전에 출시된 폰에서도 무선 디버깅을 할 수 있다.

지원하는 최소버전이 있는지는 확인을 못했다.

 

휴대폰 정보에서 빌드번호를 여러번 눌러서 개발자 모드를 활성화시켜준다.

개발자 모드에서 adb 디버깅을 활성화 시켜준다.

 

무선으로 디버깅이 가능하려면 개발 PC와 개발폰이 같은 네트워크안에 있어야 한다.

 

개발폰을 개발PC에 USB로 연결한 후

adb tcpip 5555

(포트 번호는 수정해도 된다.)를 입력한다.

 

개발폰을 PC에서 연결해제 한다.

 

개발폰의 설정 -> 연결 -> Wifi 현재 네트워크에서 ip 정보를 확인한다.

 

adb connect 192.168.0.1:5555

 (:5555)는 생략가능한것 같다.

 

연결 확인은

adb devices

를 통해 할수 있다.

 

무선 디버깅을 연결해제 하려면 다음과 같이 입력하면 된다.

adb disconnect

※주의 adb에 연결된 모든 장치가 해제된다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

Could not find com.android.tools.build:aapt2:7.2.2-7984345

 

예전에 생성한 안드로이드 프로젝트를 최신버전으로 교체했더니 에러가 발생했다

안드로이드 스튜디오 3.2버전에서부터 aapt2 제공원이 google로 바뀌어서 그렇다고 한다

 

아래를 프로젝트 build.gradle 에 추가해주면 된다

allprojects {
    repositories {
        google() 
    }
}

 

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

Duplicate class androidx.lifecycle.ViewModelLazy found in modules lifecycle-viewmodel-2.5.1-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.1) and lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)

 

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1’

 

일단 위의 내용을 입력하니 정상적으로 작동하였다.

 

종속성 확인을 위해 터미널에서

./gradlew app:dependencies

를 실행하면 라이브러리별 종속성이 나온다.

 

해당하는 라이브러리에 아래와 같이 해주면 될 것 같다

dependencies {
    implementation('some-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}
블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb7a8aa38: Failure in SSL library, usually a protocol error
error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol (external/openssl/ssl/s23_clnt.c:714 0xa8f6e6e2:0x00000000)

 

안드로이드에서 api20 미만에서 발생하는 오류이고 젤리빈 에뮬레이터에서 발생했다.

안드로이드 20미만에서는 TLSv1 SSLv3만 지원을 하는데 서버 프로토콜이 이를 지원하지 않으면 발생한다

api20미만에서도 구글 플레이 서비스를 이용해 해결할 수 있지만 예전 에뮬레이터에선 구글 플레이가 지원이 안되어서 해결을 못하였다.

 

try {
          ProviderInstaller.installIfNeeded(getContext());
        } catch (GooglePlayServicesRepairableException e) {

          // Indicates that Google Play services is out of date, disabled, etc.

          // Prompt the user to install/update/enable Google Play services.
          GoogleApiAvailability.getInstance()
                  .showErrorNotification(context, e.connectionStatusCode)

          // Notify the SyncManager that a soft error occurred.
          syncResult.stats.numIoExceptions++;
          return;

        } catch (GooglePlayServicesNotAvailableException e) {
          // Indicates a non-recoverable error; the ProviderInstaller is not able
          // to install an up-to-date Provider.

          // Notify the SyncManager that a hard error occurred.
          syncResult.stats.numAuthExceptions++;
          return;
        }

아래 라이브러리를 추가해 주어야 한다.

implementation 'com.google.android.gms:play-services-auth:17.0.0'

요즘은 minsdk를 안드로이드6.0으로 설정하는 추세인거 같은데 그렇다면 발생할 일이 없겠지만 혹시 몰라서 올린다.

 

https://developer.android.com/training/articles/security-gms-provider#java

 

보안 프로바이더를 업데이트하여 SSL 악용으로부터 기기 보호  |  Android 개발자  |  Android Develope

보안 프로바이더를 업데이트하여 SSL 악용으로부터 기기 보호 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android에서는 보안 네트워크 통신을 제공하기

developer.android.com

 

https://stackoverflow.com/questions/29916962/javax-net-ssl-sslhandshakeexception-javax-net-ssl-sslprotocolexception-ssl-han

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

Android Emulator closed because of an internal error:
gpu found. vendor id 8086 device id 0x3e92
checking for bad AMD vulkan driver version...
amdvlk64.dll not found. Checking for amdvlk32...
amdvlk32.dll not found. No bad AMD Vulkan driver versions found.
checking for bad vulkan-1.dll version...
vulkan-1.dll version: 1.1.114.0
Not known bad vulkan-1.dll version; continue.

 

이런 메시지를 띄우며 에뮬레이터가 여러번 강제종료 되었다.

 

C:\Users\<your_account>\.android 폴더에 advancedFeatures.ini 를 생성해준다.

advancedFeatures.ini 안에는 아래 내용을 입력한다.

Vulkan = off
GLDirectMen = on
블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

프로젝트가 간단하고 외부 라이브러리 사용도 없다면 간단할 수 있다.

하지만 프로젝트 크기도 크고 외부 라이브러리를 사용했다면 여러 곳에서 문제가 발생할 수 있다.

 

사용중인 안드로이드 스튜디오에서 새로 프로젝트를 만들어서 조금씩 옮겨오는 방법도 있을 것이고

사용중인 안드로이드 스튜디오에서 프로젝트를 최신으로 업데이트하는 방법도 있을 것이다.

그러기엔 시간이 많이 들거 같아서 편법(?)을 사용했다.

 

프로젝트가 잘 실행되던 때의 안드로이드 스튜디오를 설치하고

라이브러리 버전이 최신 개발버전이었는데 그 당시의 배포버전으로 맞춰주었다.

 

https://developer.android.com/studio/archive

 

Android 스튜디오 다운로드 자료실  |  Android 개발자  |  Android Developers

이 페이지에는 Android 스튜디오 출시 관련 다운로드 자료실이 포함되어 있습니다.

developer.android.com

이전 버전의 안드로이드 스튜디오를 받을 수 있는 링크다.

약관 동의 버튼을 눌러주고 프로젝트가 정상적으로 동작하던 때의 버전을 사용하자.

 

github에 공개된 라이브러리라면 github주소/releases 에 보면 버전별로 볼 수 있다.

assets을 눌러보면 언제 업로드되었는지 확인할 수 있다.

프로젝트가 정상적으로 동작하던 때의 라이브러리 버전을 사용하자.

 

2019년 9월까지 정상적으로 작동했던 프로젝트를 이렇게 하니 별 오류없이 금방 되었다.

 

안드로이드 스튜디오를 사용하기 전이라면 좀 더 어려울 수 있을 것 같다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

앱에서 글라이드로 이미지를 보여주는 부분이 작동을 안하길래 로그캣을 보니 통신이 허용안된다는 내용의 로그가 찍혀있었다.

Cleartext HTTP traffic to www.google.com not permitted

안드로이드가 보안 때문에 안드로이드 9 pie 이상에서 https만 되도록 기본적으로 허용해놓았기 때문이다.

 

안드로이드 9 파이 이상의 기기에서 http 통신이 안될 때 아래를 manifest.xml의 application 태그 내에 추가해 주면 된다

 

android:usesCleartextTraffic="true"

 

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

text타입이 존재하는 mysql postgre 등 에서는 아래와 같이 하면 된다


해당하는 컬럼에 아래 어노테이션 중 하나를 추가해준다.
@Column(columnDefinition = "TEXT")
@Column(columnDefinition = "LONGTEXT")

update에서는 동작하지 않아서 create-drop으로 적용해야 한다.


아래는 수동으로 테이블 변경할 때이다.

ALTER TABLE comment_db MODIFY content LONGTEXT;


오라클에선 text 타입이 존재하지 않아 지원되지 않는다.

@Column(length=1000)으로 하면 1000 varchar2(1000 char)로 저장된다

마찬가지로 update에서는 동작하지 않는다.


수동으로 테이블을 변경할 때는 아래와 같다.

ALTER TABLE comment_db MODIFY content VARCHAR2(1000 char);

단위인 char를 생략하면 byte가 된다(byte는 언어별로 길이가 다르다)
오라클의 varchar2 최대길이는 4000 byte이다

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,
Kenney.nl

OpenGameArt.org

Untamed.wild-refuge.net

Crateboy.itch.io

Opengamegraphics.com

Gameart2d.com

Wigdetworx.com

GlitchtheGame.com

Dumbanex.com

Reinerstilesets.de

Sharecg.com

Roenica.com

Blogoscoped.com

Lostgarden.com

Subtlepatterns.com

Openclipart.org

https://craftpix.net/freebies/

https://itch.io/game-assets/free

http://unluckystudio.com/category/freegameart/

http://www.supergameasset.com/free-game-assets

https://mobilegamegraphics.com/product-category/all_products/freestuff/

https://marketplace.yoyogames.com/browse/latest?filte

http://freegameassets.blogspot.com/

http://www.reinerstilesets.de/


블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

Using RxJava 2 - Tutorial


amitshekhariitbhu/RxJava2-Android-Samples: RxJava 2 Android Examples - Migration From RxJava 1 to RxJava 2 - How to use RxJava 2 in Android


Understanding Marble Diagrams for Reactive Streams – Medium


RxMarbles: Interactive diagrams of Rx Observables


RxJava applied [JavaDay Kyiv 2016]


블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,