(ver 1.8.x) M, L 앱 간 사이닝이 다르고, M 앱이 기기에 Preload될 경우 연동 방법 (Ext)

Introduction

전제

항목

내용

항목

내용

앱 간 사이닝이 다른 경우

  • 이 경우 protectionLevel="signature" 을 이용할 수 없습니다.

  • 커스텀 퍼미션이 정의된 앱을 이미 설치한 상태라면 동일한 커스텀 퍼미션의 다른 앱을 설치할 수 없습니다.

앱 간 사이닝이 다르고, M 앱이 기기에 Preload될 경우

  • 이 경우 커스텀 퍼미션을 사용하는 컴포넌트들이 일부 제조사의 보안 관련 체크 툴에 걸리므로, 커스텀 퍼미션을 사용하는 컴포넌트들의 초기 설정은 enabled="false" 상태로 되어야 합니다.

  • 아래 코드 예시 참조 : M, L 앱의 AndroidManifest.xml

적용 방법

항목

내용

항목

내용

앱 간 사이닝을 다르게 하기 위한 설정

  1. 퍼미션 이름을 다음과 같이 서로 다르게 정의합니다.

    1. M 앱 : "com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.MAIN"

    2. L 앱 : "com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.LOCK"

  2. Manifest merge rule marker 를 이용해서 bridge 모듈에서 미리 정의한 공통 permission을 제거합니다. (install error 가 발생하지 않게 하기 위함)

  3. bridge 모듈에서 정의한 컴포넌트들의 permission 제한은 M앱에서는 L앱 퍼미션을 replace해서 적용하고, L앱에서는 M으로 적용합니다.

M 앱을 기기에 Preload 시 발생하는 문제를 위한 설정

  1. M 앱이 기기에 Preload될 경우, 초기 설정은 bridge모듈의 컴포넌트들이 enabled="false" 상태로 되어야 합니다.

    1. 아래 코드 예시 참조 : M, L 앱의 AndroidManifest.xml

  2. 그 이후 M 앱 실행 시 또는 checkAvailibility 호출 시 등 bridge모듈이 필요한 조건에서 L 앱 설치여부와 signature 일치여부를 체크한 뒤 컴포넌트들을 enable="true"상태로 변경합니다.

    1. 가이드를 참조, M앱과 L앱에 일부 코드 추가를 하면 extension library에서 자체적으로 처리합니다.

 


Basic Usage

진행 순서

0. SDK 버전 업데이트

BuzzScreen Host/Client 버전을 1.0.3.3 이상 버전으로 업데이트 해야 합니다. (아래 L앱 예시 참고)

각 라이브러리 버전은 대응되는 extension-host/client 와 버전이 일치해야 합니다.

M앱과 동일한 버즈스크린 연동

dependencies { implementation 'com.buzzvil:buzzscreen:4.15.+' }

L앱을 위한 마이그레이션 라이브러리 연동

repositories { maven { url "https://dl.buzzvil.com/public/maven" } } ... dependencies { // buzzscreen-host 와 버전이 반드시 일치해야 합니다. implementation 'com.buzzvil.buzzscreen.ext:buzzscreen-client:1.8.+' // (optional) Extension SDK에서 제공하는 암호화를 사용하는 경우, 아래의 library를 추가해 주어야 합니다. // implementation 'com.github.joshjdevl.libsodiumjni:libsodium-jni-aar:1.0.8' }

1. L앱의 Signature 찾기

본 Project 내 Extractor.jar 파일을 다운로드 받은 뒤, 아래 두 가지 방식 중 하나를 사용하여 signature string을 추출합니다. signature string은 약 1500자의 hex string 으로 표시됩니다.

Extractor.jar은 JDK 1.8이상에서 정상적으로 동작합니다.

방법 1. keystore 파일에서 추출하기

  1. cli를 통해 아래의 순서대로 수행

    1. Extractor.jar 파일을 다운받은 위치로 이동

    2. java -jar Extractor.jar keystore 입력

    3. keystore 파일 위치 입력

      1. ex) ./YourProject/keystore.jks

    4. keystore password 입력

  2. 출력으로 alias name들과 그에 맞는 signature string들이 표시됨 (일반적으로는 하나만 표시됨)

  3. 표시되는 signature string 중 해당 L앱 signing 시 사용한 alias에 맞는 string을 찾아 저장

방법 2. signed apk 내 cert정보 에서 추출

  1. cli를 통해 아래의 순서대로 수행

    1. signed apk의 확장자를 zip으로 변경 후 압축 해제

    2. 해제된 파일들 중 META-INF/CERT.RSA 파일 존재 및 위치 확인

    3. Extractor.jar 파일 다운받은 위치로 이동

    4. java -jar Extractor.jar cert 입력

    5. 위에서 확인한 CERT.RSA 파일 위치 입력

      1. ex) ./YourProject/apks/app/META-INF/CERT.RSA

    6. 표시되는 signature string 저장

 

2. M앱 Application 클래스에 코드 추가

하단 코드를 참조해서 BuzzScreenHost.init() 호출 전에 BuzzScreenHost.setLockScreenAppSignature()를 호출해줘야 합니다.

  • setLockScreenAppSignature의 인자값으로는 앞 1번에서 얻어낸 L앱의 signature string을 넘깁니다.

L앱의 signature string 에 정확한 값이 들어가도록 주의

public class App extends Application { // L 앱의 package name public static final String LOCKSCREEN_APP_PACKAGE = "L app package name"; @Override public void onCreate() { super.onCreate(); //BuzzScreenHost.init 호출 전에 아래 함수를 호출해줘야 한다. BuzzScreenHost.setLockScreenAppSignature("L 앱에서 얻어낸 signature string"); BuzzScreenHost.init(this, LOCKSCREEN_APP_PACKAGE); } }

 

3. M앱 AndroidManifest.xml

아래 코드 내용을 참조, 퍼미션과 컴포넌트들을 추가합니다.

 

4. L앱 Application 클래스에 코드 추가

하단 코드를 참조해서 BuzzScreenClient.init() 호출 전에 BuzzScreenClient.setMainAppPreloaded(true)를 호출해줘야 합니다.

 

5. L앱 AndroidManifest.xml

아래 코드 내용을 참조, 퍼미션과 컴포넌트들을 추가합니다.