2019.08.17 15:18


가끔 내 폰에 설치된 앱이 어느 마켓에서 설치되었는지 알아보고 싶을 때가 있다.

apk의 설치 출처 말이다.

당연히 대부분은 Google Play Store 이겠지만, 또 한국의 이통사에서 유통한 단말이라면 당연히 원스토어도 설치되어 있을 것이므로 그것도 고려대상.

이러저러한 이유로 결국 알아낼 수 있는 방법이 있으면 좋겠다는 생각에 알아본 코드와 함께

각 코드별 어떠한 스토어와 연결되어 있는지도 함께 적어봤으면 좋겠다는 생각에 포스팅을 하게 되었다.

 

public String getFromInstalledMarket(Context context, String targetPkg) {
PackageManager pkgMgr = context.getPackageManager();
return pkgMgr.getInstallerPackageName(targetPkg);
}

view rawSplashViewPresenter.java hosted with ❤ by GitHub

 

컨텍스트에서 가져올 수 있는 저 정보가 중요한 정보인 것이다.

그렇다면, 이 코드의 실행 결과는??

한국에서 출시한 삼성 단말이라면 다음에서 언급한 예시에 대부분 해당이 될 것 같다.

아래의 경우 이외에도 null이 리턴되는 경우가 있으니 null 유효성 처리는 필수!

각 이름의 아래는 패키지명이므로, switch-case 문으로 구분해놓으면 멋진 판독기가 동작하리라!

 

1) Google Play Store(구글 플레이스토어)

com.android.vending

 

2) ONE STORE(원스토어)

com.skt.skaf.A000Z00040

 

3) Galaxy Apps(갤럭시 앱스)

com.sec.android.app.samsungapps

 

4) Samsung Smart Switch

com.sec.android.easyMover.Agent

 

5) Android Package Installer

com.google.android.packageinstaller

 

6) Samsung Mate Agent

com.samsung.android.mateagent


출처: https://blog.soobinpark.com/152 [happy 빈이 라이프스토리]




Posted by injunech
2019.07.09 00:01


Windows Note PC에서 배터리 수명 확인하는 방법 입니다.

 

Powercfg.exe의 새로운 –Energy 스위치는 일반적인 에너지 효율성 및 배터리 수명 문제를 파악하기 위해 시스템을 분석할 수 있습니다. Energy 명령을 사용하여 컴퓨터의 배터리 상태를 정확하게 판단하기 위해서는 컴퓨터가 유휴 상태이고 프로그램이나 문서가 열려 있지 않은 경우에 사용해야 효과적입니다. Energy 명령은 %Systemroot%\system32 폴더에 HTML 보고서 파일 "energy-report.html"을 기본적으로 생성하며, 생성된 보고서를 보고 현재 사용중인 컴퓨터의 에너지 효율성 및 배터리등의 상태를 확인 할 수 있습니다.

방법


  1. [시작]을 클릭하고 검색 상자에 cmd.exe를 입력하세요. 

  2. 프로그램 아래 cmd.exe를 마우스 오른쪽 단추로 클릭하고 [관리자 권한으로 실행]을 클릭하세요.



  3. 명령 프롬프트에서 powercfg.exe –energy 명령어를 입력하고 실행하세요.
  4. [시작] [컴퓨터]를 차례대로 클릭하세요.


  5. C:\Windows\system32 위치에 생성된 energy-report.html 보고서 파일을 실행하세요.


  6. energy-report.html 보고서 파일 내용에서 배터리 : 배터리 정보에서 현재의 배터리 상태를 확인 할 수 있습니다.

     

설계 용량보다 마지막 완전 충전 값이 더 작으면 배터리 수명이 조금씩 줄어 들고 있는 것입니다.



Posted by injunech
2019.06.26 23:43


아래 에러 발생시에 해결 방법

 java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 

Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 


java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:	
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:	
com.android.tools.r8.CompilationFailedException: Compilation failed to complete	
com.android.tools.r8.utils.AbortException: Error: Program type already present: com.android.vending.billing.IInAppBillingService	

 

해결 방법: 

 

multidex용 앱 구성

multidex 구성을 사용하도록 앱 프로젝트를 설정하려면 앱이 지원하는 최소 Android 버전에 따라 앱 프로젝트에서 다음 내용을 변경해야 할 수 있습니다.

minSdkVersion이 21 이상으로 설정되어 있을 경우 아래와 같이 모듈 수준의 build.gradle 파일에서 multiDexEnabled를 true로 설정하기만 하면 됩니다.

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

 

그러나 minSdkVersion이 20 이하로 설정되어 있으면 다음과 같이 multidex 지원 라이브러리를 사용해야 합니다.

  • multidex를 활성화하고 multidex 라이브러리를 종속성으로 추가할 수 있도록 아래와 같이 모듈 수준 build.gradle 파일을 변경합니다.

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

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

     

  • 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(base);
           
      MultiDex.install(this);
       
      }
      }

       

앱을 빌드할 때 Android 빌드 도구는 기본 DEX 파일(classes.dex)과 지원하는 DEX 파일(classes2.dex, classes3.dex 등)을 필요에 따라 구성합니다. 그 후 빌드 시스템이 모든 DEX 파일을 APK로 패키징합니다.

런타임에서 multidex API는 특수 클래스 로더를 사용하여 (기본 classes.dex 파일)에서만 검색하는 대신) 메서드에서 사용할 수 있는 모든 DEX 파일을 검색합니다.

multidex 지원 라이브러리의 제한사항

multidex 지원 라이브러리에는 몇 가지 알려진 제한사항이 있으며, 이 라이브러리를 앱 빌드 구성에 통합할 때 이러한 제한사항을 파악하고 테스트해야 합니다.

  • 시작 중에 기기 데이터 파티션에 DEX 파일을 설치하는 작업은 복잡하며, 보조 DEX 파일이 큰 경우 ANR(Application Not Responding) 오류가 발생할 수 있습니다. 이 경우, ProGuard로 코드 축소를 적용하여 DEX 파일의 크기를 최소화하고 미사용 코드를 제거해야 합니다.
  • Dalvik linearAlloc 버그(Issue 22586) 때문에, Android 4.0(API 레벨 14) 미만의 플랫폼 버전이 실행 중인 기기에서는 multidex를 사용하는 앱이 시작되지 않을 수도 있습니다. API 레벨 14 미만을 대상으로 하는 경우, 시작 시나 특정 클래스 그룹이 로드될 때 앱에 문제가 있을 수 있으므로, 이러한 플랫폼 버전에서 테스트를 수행해야 합니다. 코드 축소는 이러한 잠재적 문제들을 줄이거나 완전히 없앨 수도 있습니다.
  • multidex 구성을 사용하는 앱이 매우 큰 메모리 할당을 요청하는 경우에는, Dalvik linearAlloc 제한(Issue 78035)으로 인해 런타임 중에 이 애플리케이션이 다운될 수도 있습니다. Android 4.0(API 레벨 14)에서는 할당 제한이 늘어났지만, Android 5.0(API 레벨 21) 미만의 Android 버전에서는 앱이 이 제한에 걸릴 수도 있습니다.

참고 : https://developer.android.com/studio/build/multidex.html?hl=ko

 



Posted by injunech