반응형

안녕하세요 봉자씨입니다.

위와 같은 에러가 난다면 일단 이래 저래 많은 시간을 소비하게 됩니다.

저의 경우는 아래와 같이 해결했습니다.

참고하세요

buildscript {
repositories {
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
classpath 'com.google.gms:google-services:4.3.3'
classpath
"io.realm:realm-gradle-plugin:5.13.1"
}
}

 

 

반응형
반응형

 

 

 

안녕하세요 봉자씨입니다

 

안드로이드 개발시에 androidx로 마이그레이션을 진행하다 보면 발생하는 에러 입니다.

해당 에러를 해결에 대한 상세한 내용은 아래의 url을 참고하시면 됩니다.

 

https://developer.android.com/studio/write/java8-support.

 

결국은 자바8이 필요하다는 것이구요 아래와 같이 추가해 주시면 됩니다.

 

build.gradle(Module: app) 영역에 android{ 내에 아래의 코드를 추가

    compileOptions {
        targetCompatibility = "8"
        sourceCompatibility = "8"
    }

 

그리고 다시 빌드를 하게 되면 정상적으로 빌드 됨을 확인 할 수 있어요.

 

반응형
반응형

안녕하세요, 봉자씨입니다.

 

Google Service를 사용하여 개발은 진행하였으나, google-services.json 해당 파일 내에선 패키지 이름(Package Name)을 변경하지 않았을 경우에 생기는 에러입니다.

결론으로 정리를 하면 아래와 같습니다.

리팩토링(Refactoring) =>패키지 이름 변경=> But! google-services.json내에 패키지 이름은 변경되지 않았기 때문입니다.

그럼 해결 방법은 일단 먼저 Android로 되어 있는 프로젝트 보기를 아래와 같이 Project로 바꿔줍니다.

 

그리고 나서 이제 해당 프로젝트로 들어가서 App을 선택하게 됩니다. 그리고 아래와 같이 google-services.json 파일을 선택합니다.

 

아래와 같이 파일이 열리는데, 이때 해당 파일의 패키지 이름을 바꿔주면 됩니다. 

 

변경 프로젝트가 이젠의 프로젝트의 이름만 바꾼거면 상관 없으나,

비슷한 프로젝트를 생성하려고 복사했다면, google-services.json을 다시 새롭게 생성해서 받으셔서 사용하시면 됩니다.

https://console.firebase.google.com/?hl=ko

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

여기 가셔서 프로젝트 생성하고 하면 google-services.json 이 파일을 하나 생성 되니 참고하세요

감사합니다.

반응형
반응형

안녕하세요, 봉자씨입니다.

안드로이드 스튜디오를 업데이트 하면서 갑자기 무한 루프가 진행되듯

Indexing/Scanning/Building

반복된다면 어떻게 해야 할가요?
이것 저것 해봐도 멈추지도 않고
버티고 해보려해도 한계에 달했습니다.

답은 은근히 간단합니다.
아래의 빨간 부분을 클릭해서 한번 정리하고 나시면
정상으로 돌아 옵니다.

글이 조금이나마 도움이 되셨다면 공감 부탁드립니다.

오늘도 좋은 하루 되세요!

감사합니다.

클릭 클릭 공감 클릭~~

반응형
반응형

안녕하세요, 봉자씨입니다.

프로젝트의 build.gradle에서 모든 compile을  implementation으로 변경했습니다.

그런데도 불구 하고 여전히 경고 메시지가 표시됩니다.

아래와 같은 경고를 확인 할 수 있습니다.

분명히 아래와 같이 바꿔 줬는데 계속적으로 에러가 발생하는 것을 확인 할 수 있습니다.

아래와 같이 바꿨는데도 에러가 계속적으로 발생하는 이유는 아래 클래스가 문제가 되는 것입니다.

com.google.gms:google-services



그래서 이를 바꾸기 위해서는

프로젝트의 build.gradle로 들어가서 클래스 패스에 적힌 google-service의 버전을 바꿔주면 됩니다.

buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:3.1.0'
}
}


아마 위와 같이 되어 있는 것을 아래와 같이 바꿔주면 에러가 사라집니다.

buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:3.2.0'
}
}


글이 조금이나마 도움이 되셨다면 공감 부탁드립니다.

오늘도 좋은 하루 되세요!

감사합니다.

클릭 클릭 공감 클릭~~





반응형
반응형

안녕하세요 봉자씨입니다.


ERROR

Caused by: android.os.TransactionTooLargeException: data parcel size 12652112 bytes



무슨 에러인가?

결론적으로 보면 안드로이드 인텐트로 넘기는 데이터의 크기가 오버 해서 발생하는 에러라고 있습니다. 하지만 안드로이드에서는 컴퍼넌트간에 인텐트로 데이터를 전달하는데 있어서 바인더 트랜잭션 버퍼안에 저장이 됩니다. 버퍼의 크기는 현재 1mb 모든 트랜잭션을 공유하게 됩니다. 여기서 발생한 TransactionTooLargeException  버퍼안에 저장을 없었기에 발생한 것입니다.


해결 방안!

인텐트로 넘기는 데이터를 최대한 줄여서 해당 오류에서 벗어 날 수 있습니다. 또는 인텐트보다 SharedPreference를 활용해 보는 것도 좋을 듯합니다.



참고 사이트



반응형
반응형

안녕하세요 봉자씨입니다.



ERROR

Error while executing: am start -n "your activity....." -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=your activity..... }

Error type 3

Error: Activity class {your activity.....} does not exist.

Error while Launching activity


무슨 에러인가?


결론적으로 보면 Activity가 없다는 것인데 분명 존재하는 경우에 발생하기도 합니다. 여러 원인에 의해서 발생하는 에러로 정확히 단정 지어 이야기 하기 힘든 에러입니다.



해결 방안!


해결 방안으로는 3가지 방법을 권해 드립니다.




첫번째 방법

1. android studio에서 빌드->clean project->

2. android studio 재시작

3. 빌드 -> rebuild project 후 재실행


두번째 방법

1. AndroidManifest 파일로 이동

2. versionName를 수정
    ex) android:versionCode="1"
          android:versionName="1.1"

세번째 방법(안드로이드 O?)

1. 폰의 슬라이드 바를 내립니다.

2. 유저를 손님으로 들어 가봅니다.

3. 거기 내가 삭제한 앱이 아직 존재하는지 확인하고 삭제 합니다.


감사합니다.




반응형
반응형

안녕하세요 봉자씨입니다.



ERROR


java.lang.IllegalArgumentException: Service Intent must be explicit: Intent


무슨 에러인가?


안드로이드 5.0 롤리팝 버전부터 인텐트 선언 시 명시적으로 선언이 안되게 되어 있어서 발생하는 에러



해결 방안!


 아래와 같이 선언하고 사용하신 다면 오류가 발생합니다.

startService(new Intent("com.bongs.kungkung.service.ScreenonoffService"));


그래서 위의 소스를 아래와 같이 변경 하시면 됩니다.

Intent service = new Intent(getApplicationContext(), ScreenonoffService.class);
service.setPackage("com.bongs.kungkung.service");
startService(service);


반응형
반응형

안녕하세요 봉자씨입니다.



ERROR


Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_67\bin\java.exe'' finished with non-zero exit value 1


무슨 에러인가?


결론적으로 이야기 하면 MULTI DEX 문제.  너무 많은 메소드를 참조하여 발생하는 문제.

안드로이드 개발을 하다 보면 앱(APK) 파일은 DEX(Dalvik Executable) 파일 형식의 실행 가능 바이트코드 파일을 포함하고 있다. 개별 .dex파일은 사용할 수 있는 메서드의 총 개수가 65,536로 제한되어 있다. 그래서 이 제한을 보통 ’64K 참조 제한’이라고 한다. 그럼 과연 DEX파일 형식은 왜 추가되고 왜 늘어 나는 것이냐가 중요합니다.


왜 갑자기 멀티DEX에러가 발생하는 걸까?

쉽게 이야기 하자만 너무 많은 메소드를 가져와서 실행을 하려고 하니 담을 수 있는 그릇이 넘치는 것이고 그로 인해서 더 추가해 라고 요구하는 것입니다.


과연 얼마나 들어 가득 찾길래 멀티가 필요하다는 거지?

안드로이드 스튜디오의 메뉴에서 Build > Analyze APK를 선택하면 .apk 파일을 구성하는 것들을 자세히 살펴볼 수 있습니다. 꼭 확인 해보세요!



그래서 멀티 DEX는 어떻게 구성이 되는 거져?

하나의 dex가 모자라서 더 많이 담기 위해서 덱스 파일을 두개를 두겠다는 겁니다.

classes.dex와 classes2.dex파일로 .dex 파일이 2개 있는 것을 알 수 있다.(위에 사진을 보면 보이죠?)



해결 방안!


1. build.gradle 파일에 multidex 라이브러리를 추가하고, multidexEnabled 옵션을 true로 설정



중요한 사항 minSdkVersion 21 이상일 경우는 아래와 같이만 하면 됨.


android {
    defaultConfig
{
       
...
        minSdkVersion
21
        targetSdkVersion
26
       
multiDexEnabled true
   
}
   
...
}



그러나 minSdkVersion 21 미만 즉, 20이하일 경우는 mulidex 지원 라이브러리를 사용해야해서 아래와 같이 수정.


android {
    defaultConfig
{
       
...
        minSdkVersion
15
        targetSdkVersion
26
       
multiDexEnabled true
   
}
   
...
}

dependencies
{
 
compile 'com.android.support:multidex:1.0.1'
}




2. Application 클래스를 재정의 했느냐의 여부에 따라 두가지 방법으로 적용이 가능함.



Application 클래스를 따로 재정의 하지 않았다면 ?

-> 매니페스트 파일을 편집하여 <application> 태그에서 android:name 설정


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   
package="com.example.myapp">
   
<application
           
android:name="android.support.multidex.MultiDexApplication" >
        ...
   
</application>
</manifest>




Application 클래스를 재정의 하였다면?

-> MultiDexApplication을 확장 변경


public class MyApplication extends MultiDexApplication { ... }




Application 클래스를 재정의하지만 기본 클래스를 변경할 수 없을 경우?

attachBaseContext() 메서드를 재정의하고 MultiDex.install(this)을 호출하여 multidex를 활성화


public class MyApplication extends SomeOtherApplication {
 
@Override
 
protected void attachBaseContext(Context base) {
     
super.attachBaseContext(context);
     
Multidex.install(this);
 
}
}


반응형