Introduction
전제
항목 | 내용 |
---|---|
앱 간 사이닝이 다른 경우 |
|
앱 간 사이닝이 다르고, M 앱이 기기에 Preload될 경우 |
|
적용 방법
항목 | 내용 |
---|---|
앱 간 사이닝을 다르게 하기 위한 설정 |
|
M 앱을 기기에 Preload 시 발생하는 문제를 위한 설정 |
|
Basic Usage
진행 순서
0. SDK 버전 업데이트
BuzzScreen Host/Client 버전을 1.0.3.3 이상 버전으로 업데이트 해야 합니다. (아래 L앱 예시 참고)
각 라이브러리 버전은 대응되는 extension-host/client 와 버전이 일치해야 합니다.
M앱과 동일한 버즈스크린 연동
dependencies { implementation 'com.buzzvil:buzzscreen:3.15.+' }
L앱을 위한 마이그레이션 라이브러리 연동
repositories { maven { url "https://dl.bintray.com/buzzvil/maven/" } } ... dependencies { // buzzscreen-host 와 버전이 반드시 일치해야 합니다. implementation 'com.buzzvil.buzzscreen.ext:buzzscreen-client:1.1.1.0' // (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 파일에서 추출하기
cli를 통해 아래의 순서대로 수행
Extractor.jar
파일을 다운받은 위치로 이동java -jar Extractor.jar keystore
입력keystore 파일 위치 입력
ex)
./YourProject/keystore.jks
keystore password 입력
출력으로 alias name들과 그에 맞는 signature string들이 표시됨 (일반적으로는 하나만 표시됨)
표시되는 signature string 중 해당 L앱 signing 시 사용한 alias에 맞는 string을 찾아 저장
방법 2. signed apk 내 cert정보 에서 추출
cli를 통해 아래의 순서대로 수행
signed apk의 확장자를 zip으로 변경 후 압축 해제
해제된 파일들 중
META-INF/CERT.RSA
파일 존재 및 위치 확인Extractor.jar
파일 다운받은 위치로 이동java -jar Extractor.jar cert
입력위에서 확인한
CERT.RSA
파일 위치 입력ex)
./YourProject/apks/app/META-INF/CERT.RSA
표시되는 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
아래 코드 내용을 참조, 퍼미션과 컴포넌트들을 추가합니다.
<permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}" tools:node="remove"/> <permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.MAIN" android:protectionLevel="normal"/> <uses-permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}" tools:node="remove"/> <uses-permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.MAIN"/> <application> <provider android:name="com.buzzvil.buzzscreen.bridge.DataProvider" android:authorities="${applicationId}.DataProvider" android:permission="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.LOCK" android:enabled="false" tools:replace="android:permission"/> <receiver android:name="com.buzzvil.buzzscreen.bridge.EventReceiver" android:permission="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.LOCK" android:enabled="false" tools:replace="android:permission"/> <service android:name="com.buzzvil.buzzscreen.bridge.MessengerService" android:permission="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.LOCK" android:enabled="false" tools:replace="android:permission"/> </application>
4. L앱 Application 클래스에 코드 추가
하단 코드를 참조해서 BuzzScreenClient.init()
호출 전에 BuzzScreenClient.setMainAppPreloaded(true)
를 호출해줘야 합니다.
public class App extends Application { public static final String MAIN_APP_PACKAGE = "M app package name"; @Override public void onCreate() { super.onCreate(); BuzzScreen.init("APP_ID", this, SimpleLockerActivity.class, R.drawable.image_on_fail); BuzzScreenClient.setMainAppPreloaded(true); BuzzScreenClient.init(this, App.MAIN_APP_PACKAGE); }
5. L앱 AndroidManifest.xml
아래 코드 내용을 참조, 퍼미션과 컴포넌트들을 추가합니다.
<permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}" tools:node="remove"/> <permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.LOCK" android:protectionLevel="normal"/> <uses-permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}" tools:node="remove"/> <uses-permission android:name="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.LOCK"/> <application> <provider android:name="com.buzzvil.buzzscreen.bridge.DataProvider" android:authorities="${applicationId}.DataProvider" android:permission="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.MAIN" tools:replace="android:permission"/> <receiver android:name="com.buzzvil.buzzscreen.bridge.EventReceiver" android:permission="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.MAIN" tools:replace="android:permission"/> <service android:name="com.buzzvil.buzzscreen.bridge.MessengerService" android:permission="com.buzzvil.buzzscreen.permission.USE_BRIDGE${buzzScreenAppKey}.MAIN" tools:replace="android:permission"/> </application>