AndFix熱修復問題

時隔兩週遲遲沒有新的產出實在內疚,怪AndFix咯,這樣至少還能得到一丟丟安慰。在前面一篇《AndFix熱修復實現》之後本以爲已是太平盛世了,熟知測試上出現了問題,真機測試途中發現HTC6.0.1與MEIZU5.1居然在熱修復替換clazz_new意外崩潰了,“阿狸,說好的兼容2.0~6.0呢”?百度上逗留了好久,大部分都指明是>6.0權限問題,需要在代碼中動態申請權限(如下demo所示),但小編斷點後發現判定權限是否添加的結果都是可執行的,並沒有提示需要授予相關權限,當然前提已經在註冊表裏寫過權限聲明的了,這個有興趣的親可以深入瞭解下。

動態申請權限

final private int REQUEST_CODE_ASK_PERMISSIONS = 123;

private void insertDummyContactWrapper() {
    int hasWriteContactsPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS);
    if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
        if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_CONTACTS)) {
            showMessageOKCancel("You need to allow access to Contacts",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_ASK_PERMISSIONS);
                        }
                    });
            return;
        }
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_ASK_PERMISSIONS);
        return;
    }
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            REQUEST_CODE_ASK_PERMISSIONS);
}

private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
    new AlertDialog.Builder(this)
            .setMessage(message)
            .setPositiveButton("OK", okListener)
            .setNegativeButton("Cancel", null)
            .create()
            .show();
}

熱修復問題 java.lang.UnsatisfiedLinkError

  • method not found: com.alipay.euler.andfix.AndFix.setup:(ZI)Z
  • No implementation found for boolean com.alipay.euler.andfix.AndFix.setup(boolean,int) (tried Java_com_alipay_euler_andfix_AndFix_setup and Java_com_alipay_euler_andfix_AndFix_setup__ZI)

出現以上兩種log情況,我們需要將線上demo中lib提供的.os文件導入到jniLibs目錄下。

jniLibs目錄


熱修復問題 Fatal signal 11 (SIGSEGV)

(該問題求解)從網上尋求答案大都是說與手機內存相關(不同SDK版本),或是與調用JNI函數的指針相關。這裏僅提出問題尋求解決方案,或等AndFix完善使用再跟進。下面是異常位置以及log日誌。

AndFix替換文件異常

====Fatal signal 11 (SIGSEGV) at 0x000000000 (code=1), thread 5761====
Log日誌

發佈了50 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章