반응형

이번 포스팅은 Android Studio에서 빌드하면서 발생한 오류와 오류 원인 및 해결방법에 대하여 알아보도록 하겠습니다.

이번에 발생한 오류는 'aapt2 process unexpectedly exit.'입니다.

 

목차

1. AAPT2의 정의

2. 'aapt2 process unexpectedly exit.' 원인

3. 'aapt2 process unexpectedly exit.' 해결방법

4. 마무리

 


#1. AAPT2의 정의

AAPT2는 Android Asset Packaging Tool의 약자로 Android Studio 및 Android Gradle 플러그인이 앱의 Resources를  컴파일하고 패키징 하는 데 사용하는 빌드 도구입니다. 다시 말해 Android Stuio에서 APK나 AAB 파일을 만들 때 앱의 흩어져 있는 Resources를 모으고 압축해서 사용하는 빌드 도구인 셈입니다. AAPT2는 Resources를 Android 플랫폼에 최적화된 바이너리 형식으로 파싱하고 색인을 생성하며 컴파일을 진행합니다.

Android Gradle 플러그인 3.0.0 이상에서는 기본적으로 AAPT2가 사용이 됩니다. 따라서 대부분의 Android 개발자들이 AAPT2를 통해 Android  앱을 빌드할 것 같습니다.

그럼 AAPT2가 어떤 과정으로 빌드를 진행하는지 알아보도록 하겠습니다.

1) Compile : AAPT는 Resources 및 대부분의 파일을 확장자가. flat인 중간 바이너리 파일을 생성합니다.

2) Link : Compile 된 바이너리 파일과 패키지를 단일 APK 패키지로 병합합니다. 그러나 생성된 APK는 DEX 바이트 코드를 포함하지 않으며 서명되어 있지 않아 기기에 배포할 수 없는 상태입니다.

Andrioid Gradle 플러그인을 사용하여 명령줄에서 앱을 빌드하지 않는 경우 d8과 같은 다른 명령줄 도구를 사용하여 자바 바이트 코드를 DEX 바이트 코드로 컴파일하고 apksigner를 사용하여 APK에 서명할 수 있습니다.

 


 

#2. 'aapt2 process unexpectedly exit.' 원인

Android Studio에서 빌드하면서 아래와 같은 오류가 발생하면서 빌드를 실패하였습니다.

'aapt2 process unexpectedly exit.'

즉, 직역하면 'AAPT2 프로세스가 예기치 않게 종료되었습니다'라는 의미인데 원인이 무엇일까요?

문제의 원인은 Gradle을 기반으로 하는 Android Gradle 플러그인 버전(AGP)과 Gradle 버전의 불안정성입니다. Android Studio를 새로 설치를 하면 Android Gradle 플러그인과 Gradle이 업데이트가 되어 문제가 발생하지 않을 수 있지만 새로 설치를 하지 않고 build.gradle 파일을 통해 수동으로 업데이트할 수가 있습니다.  이때 이번 에러가 발생할 수 있으며 유의해야 할 점은 각 버전의 Android Gradle 플러그인에 필요한 Gralde 버전을 가지고 있다는 것입니다. 아래의 표를 참고하여 최상의 성능을 위해서 Gradle과 플러그인을 가능한 최신 버전으로 사용을 하는 것이 좋다고 합니다. 

플러그인 버전 필요한 최소 Gradle 버전
8.5 8.7
8.4 8.6
8.3 8.4
8.2 8.2
8.1 8.0
8.0 8.0
7.4 7.5

 


 

#3. 'aapt2 process unexpectedly exit.' 해결 방법

#2. 에서 문제의 원인을 Gradle을 기반으로 하는 Android Gradle 플러그인 버전(AGP)과 Gradle 버전의 불안정성이라고 하였고 최상의 성능을 위해서 각 버전의 Android Gradle 플러그인에 필요한 Gralde 버전을 알아보았습니다.

그럼 해결방법으로 Android Gradle 플러그인 버전(AGP)과 Gradle 버전을 알맞게 업데이트를 진행하겠습니다.

1) Gradle 버전 업데이트

Android Studio의 File > Project Structure > Project 메뉴에서 Gradle 버전을 지정하시면 됩니다.

Android Gralde Plug 버전과 Gradle 버전을 업데이트

2) build.gradle 에서 변경된 Gradle 버전을 확인한 후 File > Sync Project with Gradle Files을 실행하여 Gradle을 다운로드 및 Sync를 맞춰주면 문제가 깔끔하게 해결이 됩니다.


 

#4. 마무리

이번 문제를 통해 AAPT2의 개념도 다시 정리를 할 수 있었으며 저와 같이 빌드 오류를 경험하신 분이라면 해결 방법을 찾는데 고생하시지 말고 이 글을 보시고 빠르게 문제를 해결하시길 바랍니다.

긴 글 읽어주셔서 감사합니다.

끝.


Reference : https://stackoverflow.com/questions/65634588/im-trying-to-build-my-app-but-i-getting-this-error-aapt2-proces s-unexpectedly-e

 

im trying to build my app but i getting this error: AAPT2 process unexpectedly exit. Error output

im trying to build my app on android studio but im getting this error "AAPT2 process unexpectedly exit. Error output" i search about it and tryed everything to solve this but dosent help ...

stackoverflow.com

 

 

 

 

 

반응형
반응형

이번 포스팅은 Android에서 키보드가 뷰 레이아웃에 영향 주지 않게 하는 방법에 대하여 알아보도록 하겠습니다.

 

화면에서 어떠한 정보를 입력하기 위해 우리는 소프트웨어 키보드가 화면 하단에서 상단으로 업로드가 되며 데이터를 입력할 수 있습니다.

 

이때 키보드가 위로 업로드되면서 기존에 화면에 있던 레이아웃들이 영향을 받게 되는 경우가 있습니다.

 

예를 들어 기존에 화면에 있던 레이아웃이 layout_weight로 구성이 되어 있다면 키보드가 위로 업로드되면서 기존에 화면에 있던 레이아웃들은 정한 layout_weight 값에 따라 화면이 조정이 됩니다.

 

하지만, 키보드가 업로드되면서 기존에 화면에 있던 레이아웃에 영향을 주지 않고 싶을 땐 어떻게 할까요?

 

바로 AndroidMenifest.xml에서 해당 Activity 정보에 windowsoftInputMode 설정을 재정의 해주면 됩니다.

 

 

# adjustNothing




  <activity name = ".InputActivity"
    activity android: windowsoftInputMode = "adjustNothing"
           ......
    />

 

위와 같이 adjustNothing을 설정해주면 '화면에서 어떠한 것도 조정하지 않는다'는 의미로 기존에 화면에 있던 레이아웃을 건들지 않고 키보드만 위로 업로드가 됩니다.

 

참고) 이와 반대로 적용을 하고 싶다면 adjust 속성으로 변경하시면 adjustNothing과 정반대로 작동을 합니다.

 



 주의) adjustNothing 적용 시 키보드가 화면을 가릴 수 있습니다.


          이 점은 적용시 주의해야 합니다.

 

 

# adjustResize




   <activity name = ".InputActivity"
    activity android: windowsoftInputMode = "adjustResize"
           ......
    /> 

 

위와 같이 adjustResize을 설정해주면 '화면에서 키보드가 올라와도 EditText와 UI가 화면에 보이도록 Activity를 resize 한다.'라는 의미입니다.

 

따라서 스크롤이 적용되어 키보드가 가린 부분을 화면을 아래로 밀어 내리면서 사용자가 볼 수 있습니다.

 

반응형
반응형

이번 포스팅은 가비지 컬렉션 로그 메시지와 해결방법에 대하여 알아보도록 하겠습니다.

 

 
  04-10 15:54:53.515: D/dalvikvm(14465): GC_CONCURRENT freed 535K, 38% free 10769K/17287K, paused 2ms+2ms 

 

=> Heap 영역에 메모리가 차 오르는 순간 자주 보이는 가비지 컬렉션 로그로 정산 동작.

     많으면 많을수록 가비지 컬렉션으로 PAUSE 되는 시간 때문에 RUNTIME에 영향을 주게 됩니다.

     해당 메시지가 나오지 않게 하려면, 짧은 시간에 발생하는 객체 생성을 줄여야 합니다.

반응형

+ Recent posts