(ver 1.9.x) M, L 앱 간 사이닝이 다르고, M 앱이 기기에 Preload될 경우 연동 방법 (Ext)
Introduction
전제
항목 | 내용 |
---|---|
앱 간 사이닝이 다른 경우 |
|
앱 간 사이닝이 다르고, M 앱이 기기에 Preload될 경우 |
|
적용 방법
항목 | 내용 |
---|---|
앱 간 사이닝을 다르게 하기 위한 설정 |
|
M 앱을 기기에 Preload 시 발생하는 문제를 위한 설정 |
|
Basic Usage
진행 순서
0. SDK 버전 업데이트
BuzzScreen Host/Client 버전을 1.0.3.3 이상 버전으로 업데이트 해야 합니다. (아래 L앱 예시 참고)
각 라이브러리 버전은 대응되는 extension-host/client 와 버전이 일치해야 합니다.
L앱을 위한 마이그레이션 라이브러리 연동
repositories {
maven { url "https://dl.buzzvil.com/public/maven" }
}
...
dependencies {
// buzzvil-bom은 M앱과 동일한 버전을 사용해야 합니다. 최신 버전을 권장합니다.
implementation platform("com.buzzvil:buzzvil-bom:$yourBuzzvilBomVersion")
implementation "com.buzzvil:buzzscreen"
implementation "com.buzzvil.buzzscreen.ext:buzzscreen-client" // L앱을 위한 BuzzScreenClient 라이브러리
// buzzvil-bom 5.15 미만 버전을 사용하는 경우 버전을 명시해야 하며, M앱과 동일한 버전을 사용해야 합니다.
// implementation 'com.buzzvil.buzzscreen.ext:buzzscreen-client:1.9.+'
// (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)
를 호출해줘야 합니다.
5. L앱 AndroidManifest.xml
아래 코드 내용을 참조, 퍼미션과 컴포넌트들을 추가합니다.