스마트폰의 설정에서 앱 권한에 어느순간 추가하지 않은 Permission 이 표시되고 있을 때 (선택 권한)

  • AndroidManifest.xml 소스 상에서는 표시되는 권한과 관련된 설정값이 전혀 없음

    <uses-permission android:name="android.permission.INTERNET" />
    ...
  • 프로젝트를 빌드하면 추가한 의존성 및 라이브러리들까지 포함된 Merged Manifest 를 확인 할 수 있음

    • 경로 : app/build/outputs/logs/manifest-merger-debug-report.txt
    • 내용
        uses-permission#android.permission.~~~
        ADDED from [(library or dependency name)] /(~~~local path ~~~)/AndroidManifest.xml:15:5-71
    • 해당 경로의 AndroidManifest.xml 파일 내용을 확인해보면 표시되는 권한을 확인 할 수 있음.
    • 라이브러리 제거로 확인 후 대처.
  • 참고 : https://medium.com/glucosio-project/how-libraries-can-silently-add-permissions-to-your-android-app-620911d7de6c

* 과거 안드로이드 개발 중 경험했던 일입니다.

* 당시 답변해 주신 LG전자 연구원분께 감사드립니다.


- 앱에 추가한 기능 (백그라운드에서 통신하는 기능) 이 정상적으로 실행되지 않음

- AsyncTask 가 실행이 안된것도 아니고, 실패 한것도 아님.

- 첫 생성 부분은 정상 호출 되었으니 실행부가 진행되지 않음

- AsyncTask 가 대기 상태로 기다리는 것으로 보임

- 테스트해보니 기존 실행되고 있던 AsyncTask 작업이 끝나니까 이후 대기중이던 AsyncTask 가 정상 실행되는 것을 확인함



* AsyncTask Thread의 제한은 단말의 CPU 개수와 관련이 있습니다.


- AsyncTask Thread 가 정상적으로 싱행되지 않은 기종은 4개의 CPU 가 있는 기종으로,

해당 N-OS (Android 7.0) 기종들은 아래 Android 소스에 의해서 CORE_POOL_SIZE 가 3 이 됩니다.

해당 pool size의 제한으로 앱에서 여러 개 운용중인 AsyncTask 의 동시 사용이 불가했을 것으로 보입니다.

다른 기종으로 시험을 해보니, 6개의 CPU를 가진 기기의 N-OS 에서는 현상이 발생하지 않았습니다.


<M-OS, AysncTask.java>

int CPU_COUNT = Runtime.getRuntime().availableProcessors();

int CORE_POOL_SIZE = CPU_COUNT + 1;

int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;


<N-OS, AysncTask.java>

int CPU_COUNT = Runtime.getRuntime().availableProcessors();

int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));

int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;



[결론]

- AsyncTask 는 동시 실행 개수에 제한이 있으므로 소켓통신 등의 시간이 오래걸리는 작업은 기본 Runnable Thread 로 구현을 하고

  자체적으로 금방 끝나는 백그라운드 작업들만 AsyncTask 로 구현해야 하는것으로 보임


[안드로이드 AVD 에뮬레이터 관련]


- 안드로이드 개발 도중 에뮬레이터로 테스트해보려고 앱을 빌드하는데 제대로 진행이 안됨.



"Waiting for target device to come online"


위 상황일때....



[일반적인 해결법 몇가지]


1. SDK 툴에서 에뮬레이터 관련, USB 드라이버 를 체크 해제 -> 적용 -> 체크 -> 적용 해서 재설치


2. Invalidate cacjes / restart


3. AVD 에뮬레이터 목록에서 해당 에뮬레이터 wipe data


등등 검색하면 꽤 나옵니다.


[제가 해당했던 상황]


- 출처

https://stackoverflow.com/questions/42757928/waiting-for-target-device-to-come-online-in-android-studio-2-3#


Offical answer; > You can't run software that uses another virtualization technology at the same time that you run the accelerated emulator. For example, VirtualBox, VMWare, and Docker currently use a different virtualization technology, so you can't run them at the same time as the accelerated emulator. emulator-acceleration – volkan Apr 12 '17 at 4:53


* 즉 다른 에뮬레이터 또는 가상화 프로그램 (도커 등)이 실행 중 일때는 동시에 사용할 수 없다.

+ Recent posts