반응형

이번 포스팅은 Android Build 오류에 대하여 알아보도록 하겠습니다.


< Error> 

This Handler class should be static or leaks may occur (anonymous android.os.Handler)


< Solution > 


1. Handler class는 object가 아니라 static class로 선언이 되어야 하는데 그러지 않아서 오류가 발생하는 것입니다.

2. 여기서 한 가지....

   나는 Handler를 아래와 같이 static 으로 선언하였는데 왜 이런 오류가 계속 뜨는 거지?


public static final Handler myHandler = new Handler() {

public void handleMessage(Message msg) {

    .........
}
}


3. 원인 : Handler 객체는 변수로써 static으로 선언하였지만 내부에 있는 익명의 클래스는 static이 아니기 때문에 계속 오류가 발생하는 것입니다.


4. 해결: Handler 객체를 상속받은 새 static 클래스를 만든 후 Logic을 여기서 구현하시면 됩니다.

 // 변수로 Handler 선언
private Handler mHandler = new EunHandler();


private static class EunHandler extends Handler {
public void handleMessage(Message msg) {

// ..................
         // Logic 구현

// ..................
}
};


반응형
반응형

이번 포스팅은 Android Build 오류에 대하여 알아보도록 하겠습니다.


< Error>


WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.

It will be removed at the end of 2019.

For more information, see https://d.android.com/r/tools/task-configuration-avoidance.

REASON: It is currently called from the following trace:


< Solution >


1. 'com.google.gms:google-services:4.3.0'에서 오류가 발생하였습니다.

   gms 라이브러리 내부적으로 발생하는 오류로써 향후 수정이 되어 배포될 것입니다.

2. 임시방편으로 build.gradle의 gms 라이브러리 버전을 downgrade 하여 아래와 같이 수정하면 오류 없이 정상적으로 Build가 될 것 입니다.

dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.google.gms:google-services:4.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}


반응형
반응형

이번 포스팅은 Android Build 오류에 대하여 알아보도록 하겠습니다.


< Error >


java.security.InvalidKeyException: Unsupported key algorithm: RSA. OnlyEC supported


< Solution > 


1. Android Keystore에 저장된 Key를 이용하여 Signature 생성 시 Key 알고리즘이 달라서 생기는 오류 

   (즉, RSA 알고리즘으로 생성된 Key를 EC 알고리즘 Key로 Signature 생성 시 오류가 발생)

2. Key 생성 알고리즘을 정확하게 아래와 같이 선언


< EC >

Signature keystoreSignature = Signature.getInstance("SHA256withECDSA");
keystoreSignature.initSign(mPrivateKey);
keystoreSignature.update(inputData);
byte[] signature = keystoreSignature.sign();


< RSA >

Signature keystoreSignature = Signature.getInstance("SHA256withRSA");
keystoreSignature.initSign(mPrivateKey);
keystoreSignature.update(inputData);
byte[] signature = keystoreSignature.sign();


반응형

+ Recent posts