AndFix 사용 지침
소개하다.
AndFix, 전체 이름은 Android hot-fix입니다.알리오픈소스의 안드로이드 핫패치 프레임워크로, 앱이 다시 버전을 발표하지 않고도 온라인의 버그를 복구할 수 있도록 했다.Android 2.3 ~ 6.0을 지원합니다.
사용 방법
compile 'com.alipay.euler:andfix:0.3.1@aar'
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
patchManager.loadPatch();
이 말로 appversion
String appversion= getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
을 얻을 수 있습니다. 매번 appversion이 변경될 때마다 모든 패치가 삭제됩니다. 만약 appversion이 바뀌지 않으면 저장된 모든 패치를 불러옵니다.apkpatch -o D:/Patch/ -k debug.keystore -p android-a androiddebugkey -e android f bug-fix.apk t release.apk
대체적인 원리
apkpatch는 두 apk를 비교한 후에 다른 부분을 찾아낸다.생성된 apatch 파일을 볼 수 있습니다. 접두사를 zip으로 바꾸고 압축을 풀면 dex 파일이 있습니다.jadx를 통해 원본 코드를 살펴보면 복원된 코드가 있는 클래스 파일입니다. 변경된 클래스는 하나CF의 접미사, 그리고 변동하는 방법은 @MethodReplace라는 annotation이 추가되어 있으며, clazz와method를 통해 교체할 방법을 지정합니다.그리고 클라이언트 sdk가 패치 파일을 받으면 annotation에 따라 바꿀 방법을 찾습니다.마지막으로 JNI 레이어에서 메소드를 대체합니다.
여러 번 헝
로컬에 패치가 여러 개 저장된 경우 AndFix는 패치가 생성된 시간 순서에 따라 패치를 로드합니다.구체적으로는 근거다.apatch 파일의 PATCH.MF의 필드 Created-Time 입니다.
보안
readme는 개발자에게 다운로드한 apatch 파일의 서명이 apkpatch 도구를 사용할 때 사용하는 서명인지 확인해야 한다고 알려 줍니다. 검증하지 않으면 누구나 자신의 apatch 파일을 만들어서 앱을 수정할 수 있습니다.하지만 AndFix가 인증을 한 것을 보았습니다. 패치 파일의 인증서와 현재 apk의 인증서가 같지 않으면 패치를 불러올 수 없습니다.홈페이지에는 또 하나의optimize file의 지문을 검증해야 한다는 힌트가 있다. 로컬에 저장된 패치 파일을 교체하는 것을 방지하기 위해 MD5코드를 검증해야 하는데 SecurityChecker 클래스에서도 이미 이 작업을 했다.그러나 이 MD5코드는sharedpreference에 저장되어 있으며 핸드폰이 루트가 되어 있으면 접근할 수 있습니다.
뒤섞이다
-printmapping proguard.map
우선 맵핑 파일 기록 혼동 규칙을 생성한 다음에 printmapping이라는 말을 주석하고 매번 applymapping만 사용할 수 있다.-applymapping proguard.map
그리고 여기에-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native ;
}
-keep class com.alipay.euler.andfix.** { *; }
닥친 문제
처음 만든 데모에서 매번 발생하는 apatch 파일의 이름은 같고, 결과적으로 첫 번째 패치만 적용됩니다.원본 코드를 보고 매번 이름이 달라야 불러올 수 있다는 것을 알았습니다.log에도 알림이 있을 텐데 눈치채지 못했습니다.
File src = new File(path);
File dest = new File(mPatchDir, src.getName());
if(!src.exists()){
throw new FileNotFoundException(path);
}
if (dest.exists()) {
Log.d(TAG, "patch [" + path + "] has be loaded.");
return;
}
제한성
Nuwa와 비교
누와는 또 다른 핫패치 프레임워크로 QQ공간팀이 제시한 안드로이드 앱 핫패치 동적 복구 기술을 바탕으로 하는 원리다.AndFix는 Nuwa에 비해 다음과 같은 이점을 제공합니다.
단점도 있어요.
공식readme 문서의 각 핫 패치 방안 분석과 비교Alibaba-AndFix Bug 핫 복구 프레임워크 원리 및 원본 분석AndFix 분석
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.