時隔兩週遲遲沒有新的產出實在內疚,怪AndFix咯,這樣至少還能得到一丟丟安慰。在前面一篇《AndFix熱修復實現》之後本以爲已是太平盛世了,熟知測試上出現了問題,真機測試途中發現HTC6.0.1與MEIZU5.1居然在熱修復替換clazz_new意外崩潰了,“阿狸,說好的兼容2.0~6.0呢”?百度上逗留了好久,大部分都指明是>6.0權限問題,需要在代碼中動態申請權限(如下demo所示),但小編斷點後發現判定權限是否添加的結果都是可執行的,並沒有提示需要授予相關權限,當然前提已經在註冊表裏寫過權限聲明的了,這個有興趣的親可以深入瞭解下。
動態申請權限
- 參考1:Android M 動態權限獲取
- 參考2:權限管理的學習資料和使用例子
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目錄下。
熱修復問題 Fatal signal 11 (SIGSEGV)
(該問題求解)從網上尋求答案大都是說與手機內存相關(不同SDK版本),或是與調用JNI函數的指針相關。這裏僅提出問題尋求解決方案,或等AndFix完善使用再跟進。下面是異常位置以及log日誌。
====Fatal signal 11 (SIGSEGV) at 0x000000000 (code=1), thread 5761====