解決了非華為手機無法使用新版本《心臟健康研究(com.plagh.heartstudy)》APP的問題


103.Xposed_HeartStudy

解決了非華為手機無法使用新版本《心臟健康研究(com.plagh.heartstudy)》APP的問題.

如何解決 在非華為手機上使用心臟健康研究APP

成功的解決方案3: Root后直接修改系統文件模擬華為手機

使用方案

  1. ROOT手機
  2. 安裝Solid Explorer
  3. 打開/system/build.prop 編輯
  4. 在首行添加並保存ro.build.hw_emui_api_level=10
  5. 重啟手機即可.

參考資料

  1. adb獲取Android系統屬性(adb shell getprop ***)_移動開發_hqzxsc2006的專欄-CSDN博客

    1. /system/build.prop
  2. adb shell ——通過adb開啟應用、獲取SystemProperties值_移動開發_忘凍魚的博客-CSDN博客

    定義的這些字段名:ro.開頭的屬性將不能被更改屬性值,persist.開頭的屬性會被永久紀錄,其他屬性值在重新開機后均將被丟棄。

  3. Android系統開發之Systemproperties的反射用法及如何自定義名稱 - 仗劍長行 - SegmentFault 思否

    編譯不會出錯,但什么也寫不進去,當然也讀不出來。
    我們的方法沒有錯,錯的是規則,那么我們就來修改規則。
    打開external/sepolicy/property_contexts,加上一句:

成功的解決方案2: 使用別的已有的Xposed模塊模擬華為手機

既然能安裝Xposed環境那么則理論上用別的Xposed模塊模擬華為手機也是可以成功的.

使用方法

  1. ROOT手機

  2. 安裝面具Magisk

  3. 安裝面具模塊 Riru - Core

  4. 安裝面具模塊 Riru - EdXposed(YAHFA)

  5. 安裝EdXposed Manager

  6. 在EdXposed Manager里應用白名單勾選"心臟健康研究"

  7. 安裝以下任意版本激活並重啟

    • 應用變量
    • Device Emulator Pro(com.device.emulator.pro)v3.53[URET(a5f7ac1a)]
    • Device Faker(com.devicefaker.free)v1.0.0[Lam Phuong(e6112ac3)]
  8. 在對應的APP里模擬廠商=HUAWEI

  9. 即可正常使用

成功的解決方案1:使用自定義Xposed模塊模擬華為手機

使用方法

  1. ROOT手機

  2. 安裝面具Magisk

  3. 安裝面具模塊 Riru - Core

  4. 安裝面具模塊 Riru - EdXposed(YAHFA)

  5. 安裝EdXposed Manager

  6. 安裝103.Xposed_HeartStudy

    • 包名:cn.asiontang.xposed.heart_study
    • 版本:v200415.01.03.003
    • 簽名:AsionTang(10f65e31)
  7. 在EdXposed Manager里應用白名單勾選"心臟健康研究"

  8. 在EdXposed Manager里模塊列表勾選"103.Xposed_HeartStudy"

  9. 重啟手機后即可正常使用

兼容性

測試條件:

  1. 手環固件版本:1.1.0.122
  2. 使用運動健康APP能正常同步數據

以下版本在Android 9.0 AospExtended 系統的手機測試成功

  1. 心臟健康研究(com.plagh.heartstudy)v2.4.0[HeartStudy(28206cd0)]

原理

  1. 模擬華為手機的系統屬性ro.build.hw_emui_api_level >=9 即可

private boolean b(String p0){   
   p0 = ("HUAWEI".equals(p0) || (p0 = "HONOR".equals(p0)))? true : false;  
return p0;
}
private void d(){
String v0 = Build.BRAND.toUpperCase(Locale.ENGLISH);
a.c( this .String, new StringBuilder()+ "brand:" +v0);
if (! this .e() && ! this .b(v0)) {
this .f();
return ;
} else if (v.b( "first_income" , false )){
this .h();
} else {
this .startActivityForResult( new Intent( this , GuideActivity. class ), 10 );
}
return ;
}

private boolean e(){
Class v2 = Class.forName( "android.os.SystemProperties" );
Class[] v4 = new Class[ 1 ];
v4[ 0 ]=String. class ;
Object[] v4_1 = new Object[ 1 ];
v4_1[ 0 ]= "ro.build.hw_emui_api_level" ;
v2 = Integer.parseInt(v2.getDeclaredMethod( "get" , v4).invoke(v2, v4_1));
a.c( this .String, new StringBuilder()+ "emuiApiLevel: " +v2);
if (v2 >= 9 ) {
return true ;
}
return false ;
}

部分成功方案:直接通過啟動頁面

  1. ROOT手機

  2. 安裝 運動健康

  3. 安裝 HMS Core

  4. 安裝 心臟健康研究

  5. 通過ROOT權限直接跳過Splash頁面進入登錄頁面即可

  6. 每次打開都需要通過ROOT權限直接打開Main界面.

  7. 直接使用AutoJS創建一個快捷打開腳本

    //cn.asiontang.autojs.js002
    var options = ["登錄界面", "主頁面"]
    var i = dialogs.select("請選擇要強制打開的界面", options);
    switch (i) //
    {
        case 0:
            let a1 = "am start -n com.plagh.heartstudy/com.plagh.heartstudy.view.activity.LoginRegistActivity";
            shell(a1, true);
            break;
        case 1:
            let a2 = "am start -n com.plagh.heartstudy/com.plagh.heartstudy.view.activity.MainActivity"
            shell(a2, true);
            break;
        default:
            toast("您取消了選擇");
            break;
    }
    
  8. 可惜最終無法正常和手環同步數據,各種嘗試都提示同步失敗.

嘗試2:安裝 v2.4.0最新 版本APP試試

  1. 結果:失敗

  2. 能正常登錄和配對

  3. 點擊我的設備 提示 已連接

  4. 點擊設備后 智能適時測量開關 狀態顯示 已開啟

  5. 點擊心臟健康研究項目后提示開啟失敗

    智能適時測量開關 為 灰色 未啟用 狀態

  6. 就是提示數據同步失敗,請下拉刷新再次同步

  7. 進入 "心率失常檢測" - 點擊開始測試 - 重新測試 后 出現數據傳輸異常,此次測量失敗.請稍后嘗試

嘗試1:安裝 v1.0.19 舊版本APP試試

  1. 結果:失敗

  2. 能正常登錄和配對

  3. 就是提示數據同步失敗,請下拉刷新再次同步

  4. 點擊開始測試 - 重新測試 后 出現空白信號質量之后就沒有任何響應了

  5. 點擊我的設備 提示 已連接

  6. 點擊設備后 提示開啟失敗

    智能適時測量開關 為 灰色 未啟用 狀態

個人嘗試使用各種分身APP無效

  1. 嘗試過幾款支持模擬機型的分身APP
  2. 嘗試安裝過舊版本的心臟健康研究APP
  3. 最終結果都是無法正常使用

參考資料

  1. Xposed筆記.md

  2. XposedBridge可以替換非Java原生CPP方法嗎? ·問題#52·rovo89 / XposedBridge·GitHub

  3. [Q] Can Xposed hook native methods?

    Yes, native methods can be hooked. However, in case this is for an app's code, it has to be done after System.loadLibrary(), otherwise the latter overwrites the hook. Ideally, the framework should take care of this itself, but it's not straight-forward and the has been vey little need for this.

    Correct. Only JNI functions can be hooked, i.e. those which are declared in and called by Java code.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM