반응형


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

Kotlin에서 데이터를 List 형태로 받아올 때 아래와 같은 오류가 발생하였습니다.


< Error> 

java.lang.ClassCastException: java.util.Collections$UnmodifiableRandomAccessList cannot be cast to java.util.ArrayList


< Solution > 


▶ ArrayList를 Collection으로 변환하는 방법

ArrayList<User> usersArrayList = new ArrayList<User>();

Collection<User> userCollection = new HashSet<User>(usersArrayList);


▶ Collection을 ArrayList로 변환하는 방법

Collection<User> userCollection = new HashSet<User>(usersArrayList);

List<User> userList = new ArrayList<User>(userCollection );


반응형
반응형


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

Intent 형태로 데이터를 전달받을 시 아래와 같은 오류가 발생하였습니다.


< Error >

java.net.URISyntaxException: Illegal character in query at index 50: androidData://androidScheme?requestCode=8&userAgent=function trim() { [native code] }&data=VEMgU2FtcGxlIFRleHQg7JuQ66y4IOuplOyLnOyngOyeheuLiOuLpC4=

     W/System.err:     at java.net.URI$Parser.fail(URI.java:2892)

     W/System.err:     at java.net.URI$Parser.checkChars(URI.java:3065)

     W/System.err:     at java.net.URI$Parser.parseHierarchical(URI.java:3155)W/System.err:     at java.net.URI$Parser.parse(URI.java:3097)

     W/System.err:     at java.net.URI.<init>(URI.java:583)

     W/System.err:     at com.android.sample.h2a.shared.UniScheme.getA2UAllParams(UniScheme.java:58)

     W/System.err:     at com.android.sample.h2a.shared.HybridAdapter.callUnisignByUri(HybridAdapter.java:74)

     W/System.err:     at com.android.sample.h2a.MainActivity$UniSignWebViewClient.shouldOverrideUrlLoading(MainActivity.java:119)

     W/System.err:     at android.webkit.WebViewClient.shouldOverrideUrlLoading(WebViewClient.java:77)

     W/System.err:     at aLy.a(PG:1)

     W/System.err:     at sV.a(PG:21)

     W/System.err:     at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(PG:160)

     W/System.err:     at android.os.MessageQueue.nativePollOnce(Native Method)

 W/System.err:     at android.os.MessageQueue.next(MessageQueue.java:326)

 W/System.err:     at android.os.Looper.loop(Looper.java:181)

 W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7037)

 W/System.err:     at java.lang.reflect.Method.invoke(Native Method)

 W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)

 W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)


< Solution > 

Intent 로 데이터를 전달받을 시 공백이 문제가 되어 오류가 발생하였습니다.

전달받은 데이터를 Base64 인코딩하여 전달을 받거나 아래와 같이 변경하여 전달받으실 수 있습니다.

url.replaceAll(" " , "%20");

반응형
반응형


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

Keystore의 'ABC' 라는 alias를 가진 Key를 그대로 두고 그 키를 새로운 'DEF' 라는 alias에 Key를 저장을 하려고 하였습니다.


< Error >


java.security.KeyStoreException: Can only replace keys with same alias: ABC != DEF


< Solution >


1. Keystore의 setEntry 설명 문서를 살펴보니 동일한 Key를 새로 저장할 수 없고 만약 이미 등록된 alias가 있다면 동일한 alias로 조회시 새로운 Key로 대체가 된다고 설명이 되어 있었습니다.


2. 즉, Keystore에 동일한 Key를 그대로 두고 다른 alias로 중복 저장을 할 수가 원칙적으로는 없습니다.

반응형
반응형

이번 포스팅은 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