AndFix 사용 지침

3546 단어
원문은 제 개인 블로그에서 나왔습니다. 방문을 환영합니다(),전재는 출처를 밝혀 주십시오.
소개하다.
AndFix, 전체 이름은 Android hot-fix입니다.알리오픈소스의 안드로이드 핫패치 프레임워크로, 앱이 다시 버전을 발표하지 않고도 온라인의 버그를 복구할 수 있도록 했다.Android 2.3 ~ 6.0을 지원합니다.
사용 방법
  • 우선 의존compile 'com.alipay.euler:andfix:0.3.1@aar'
  • 추가
  • 그리고 Application.onCreate()에 다음 코드 추가
  • patchManager = new PatchManager(context);
    patchManager.init(appversion);//current version
    patchManager.loadPatch();
    

    이 말로 appversionString appversion= getPackageManager().getPackageInfo(getPackageName(), 0).versionName;을 얻을 수 있습니다. 매번 appversion이 변경될 때마다 모든 패치가 삭제됩니다. 만약 appversion이 바뀌지 않으면 저장된 모든 패치를 불러옵니다.
  • 그리고 필요한 곳에서Patch Manager의ddPatch 방법을 사용해서 새 패치를 불러옵니다. 예를 들어 패치 파일을 다운로드한 후에 호출할 수 있습니다.
  • 다음은 패치를 하는 과정입니다. 먼저 apk 파일을 생성한 다음에 코드를 바꾸고 버그를 복구한 후에 다른 apk를 생성합니다.공식적으로 제공하는 도구 apkpatch를 통해 생성합니다.apatch 형식의 패치 파일입니다. 원래 apk, 복구된 apk, 그리고 서명 파일을 제공해야 합니다.명령 apkpatch를 직접 사용하여 구체적인 사용 방법을 볼 수 있습니다.사용 예: apkpatch -o D:/Patch/ -k debug.keystore -p android-a androiddebugkey -e android f bug-fix.apk t release.apk
  • 인터넷 전송이나 adb push를 통해 apatch 파일을 휴대전화에 전송한 다음add Patch로 실행할 때 패치를 불러옵니다.로드된 패치는 데이터/packagename/files/apatch 에 저장됩니다.opt 디렉터리에 있기 때문에 다운로드한 패치는 한 번 사용하면 삭제할 수 있습니다.

  • 대체적인 원리
    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;
    }
    

    제한성
  • YunOS 지원되지 않음
  • 새 클래스와 필드를 추가할 수 없음
  • 보강 전의 apk를 사용하여 패치를 만들어야 하지만 패치 파일은 역컴파일되기 쉽다. 즉, 수정된 클래스 코드가 유출되기 쉽다.
  • 보강 플랫폼을 사용하면 열 패치 기능이 효력을 잃을 수 있다(360 보강에서 이 문제를 제기한 것을 보았지만 자신이 아직 검증하지 않았다).

  • Nuwa와 비교
    누와는 또 다른 핫패치 프레임워크로 QQ공간팀이 제시한 안드로이드 앱 핫패치 동적 복구 기술을 바탕으로 하는 원리다.AndFix는 Nuwa에 비해 다음과 같은 이점을 제공합니다.
  • APP를 재부팅하지 않고도 패치를 적용할 수 있습니다.
  • 안전성이 더 좋고 Nuwa 뒤에 있는 버전에도 안전성에 대한 내용이 추가될 것입니다.

  • 단점도 있어요.
  • 클래스와 필드를 추가할 수 없음
  • 참고 자료
    공식readme 문서의 각 핫 패치 방안 분석과 비교Alibaba-AndFix Bug 핫 복구 프레임워크 원리 및 원본 분석AndFix 분석

    좋은 웹페이지 즐겨찾기