안녕하세요. 제임스 입니다. 


일전에 개발했던 앱을 업데이트 하기 위해 Android Studio 프로젝트를 실행 했습니다. 

음... 그런데 이게... 무슨 일인지...

갑자기 아래와 같이 AAPT2 error 가 발생 합니다. 



위 이미지 텍스트를 그대로 옮긴 내용이 아래에 있습니다. 참조하세요.


Error:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

Error:Execution failed for task ':app:processDebugResources'.

> Failed to execute aapt



AAPT2 error 발생 원인은 아래와 같습니다. 


▶ 기존 프로젝트 개발을 Android Studio 2.x 에서 진행

▶ 해당 프로젝트를 Android Studio 3.x 에서 개발하려 함

▶ android plugin for gradle 3.0 을 사용 시 AAPT2 가 Default 로 사용하게 설정 되어 짐 (아래 링크 참조 하세요)

https://developer.android.com/studio/build/gradle-plugin-3-0-0.html



AAPT2 error 해결 방법은 아래와 같습니다. 


▶ gradle.properties 파일에 아래 코드를 추가하여 AAPT2 를 비활성화 합니다. 

android.enableAapt2=false


▶ Menu > Build > Rebuild Project 를 실행하여 프로젝트를 다시 빌드 합니다 .

▶아래 이미지와 같이 이쁘게 빌드가 됩니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


안드로이드 개발자 사이트를 뒤지다가 좋은 팁을 하나 발견하여 공유 하고자 합니다. 


Making ListView Scrolling Smooth 라는 제목의 개발 가이드 입니다. (원문은 아래 링크 참조)

https://developer.android.com/training/improving-layouts/smooth-scrolling.html


위 링크의 글을 간단히 요약하면...


ListView 스크롤을 부드럽게 유지하기 위한 핵심은 애플리케이션의 메인 스레드를 무거운 작업으로 부터 자유롭게 유지 하는 것입니다. 즉, 저장장치내 검색, 네트워크 통신 또는 SQL 사용등의 무건 작업은 별도의 스레드을 이용하는 것이 키 포인트 입니다. 


사실 특별히 새로운 부분은 아닙니다. 

하지만, 안드로이드 개발을 이제 시작 하시거나 아직 공부하고 계신 분들이라면 꼭 알고 넘어가야 하는 부분이죠. 


메인 스레드에서 하지 않으면 어떻게 사용하느냐??!

바로 background thread 를 이용하는 것입니다. 


위 오피셜 사이트에서 제공하고 있는 샘플 코드 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
    private ViewHolder v;
 
    @Override
    protected Bitmap doInBackground(ViewHolder... params) {
        v = params[0];
        return mFakeImageLoader.getImage();
    }
 
    @Override
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);
        if (v.position == position) {
            // If this item hasn't been recycled already, hide the
            // progress and set and show the image
            v.progress.setVisibility(View.GONE);
            v.icon.setVisibility(View.VISIBLE);
            v.icon.setImageBitmap(result);
        }
    }
}.execute(holder);
cs



이외 View Holder 를 이용하여 View 객체를 관리하는 것에 대한 언급도 있습니다. 


이와 관련 해서는 이후 ListView 를 다룰때 한번 정리 하도록 하겠습니다. 



 결론 


무건운 작업은 Main Thread 에서 하지 않고 Background Thread 에서 AsyncTask 를 이용하여 처리 한다 입니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,