美团APP


0x01、 目标需求:

  .a) 美团APP商超模块的另类爬虫思路实现

  .b) 主要实现功能:改机新设备,多开多线程支持

  .c) 具体的分析过程我就不写了,说一下实现,大概花了我一个月的时间,因为好多东西调试的时候都没有截图记录,现在补一下,能补多少就补多少了.

0x02、分析背景:

  .a) 美团APP

  .b) APP版本11.3.402(目前最新版本11.5.403),不影响基本小版本更新都是可以用

  .c) 软件无壳

  .d) 软件通讯过程中部分接口采取了签名验证的方式,返回数据无加密

0x03、使用到的工具以及软件:

  .a) frida(调试验证参数以及调用关系等)

  .b) Virtual App(主要多开改机)

  .c) Xposed(主要拦截网络请求)

0x04、开始动手:

  .a) 截图如下:

    0x001. 示例部分代码,hook网络通信函数(以下hook代码在美团系的APP基本通用,通过反射可以拿到请求到返回的所有对象,由于返回值是个流,读取一次就没了,我在下面的代码里加了copy功能,然后通过反射在写回去)

    0x002. 我已经分析过了所以就直接上代码了,有不懂的小伙伴可以联系我的QQ,在左侧的 关于->关于博客里面


if(packageName.equals("com.sankuai.meituan") && packageName.equals("com.sankuai.meituan")){
            classLoader = context.getClassLoader();
            XposedHelpers.findAndHookMethod("com.sankuai.meituan.retrofit2.ClientCall", context.getClassLoader(),
                    "getResponseWithInterceptorChain",
                    XposedHelpers.findClass("com.sankuai.meituan.retrofit2.Request",context.getClassLoader())
                    ,new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                            int port = initPort+userId;
                            MeiTuanServer meituanServer = new MeiTuanServer("0.0.0.0",port);
                            if (!meituanServer.isAlive()){
                                meituanServer.start(60000,true);
                                if (meituanServer.isAlive()){
                                    Log.e("EDXposed","服务启动成功,端口号为:"+port);
                                    processServer.put(userId,meituanServer);
                                }else{
                                    Log.e("EDXposed","服务启动失败,原因未知.");
                                }
                            }else{
                                Log.e("EDXposed","端口号:["+port+"]的服务已经运行中.....");
                            }
                        }
                        @Override
                        protected synchronized void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);

                            //首先获取请求的url地址
                            Object requestObject = param.args[0];
                            Method requestMethod = requestObject.getClass().getDeclaredMethod("url");
                            requestMethod.setAccessible(true);
                            String requestUrl = requestMethod.invoke(requestObject).toString();
                            requestMethod = requestObject.getClass().getDeclaredMethod("method");
                            requestMethod.setAccessible(true);
                            String method = requestMethod.invoke(requestObject).toString();
//                            Log.e("EDXposed","请求方法" + method + " 请求地址为:"+requestUrl);
                            //继续下一步通过反射拿到返回数据
                            Object rawResponse = param.getResult();
                            if (rawResponse != null) {
                                Method mbody = rawResponse.getClass().getDeclaredMethod("body");
                                rawResponse = mbody.invoke(rawResponse);
//                            Log.e("EDXposed",rawResponse.getClass().getName());
                                if (rawResponse.getClass().getName().equals("com.sankuai.meituan.retrofit2.ResponseBodySubject") && method.equals("POST")) {
                                    // 处理返回对象数据
                                    Method sourceMethod = rawResponse.getClass().getDeclaredMethod("source");
                                    InputStream is = (InputStream) sourceMethod.invoke(rawResponse);
                                    //copy inputStream
                                    ByteArrayOutputStream baos = IOUtils.inputConvertByteArray(is);
                                    is = IOUtils.byteArrayConvertInputStream(baos);
                                    String str = IOUtils.readStreamToString(is);
                                    is = IOUtils.byteArrayConvertInputStream(baos);
                                    //回写流操作,否则APP无法拿到数据进行展示
                                    //首先通过反射构造InputStreamSubject对象
                                    Class<?> inputSubject = XposedHelpers.findClass("com.sankuai.meituan.retrofit2.InputStreamSubject", context.getClassLoader());
                                    Constructor<?> inputSubjectConst = inputSubject.getConstructor(InputStream.class);
                                    Object inputSubjectObject = inputSubjectConst.newInstance(is);
                                    //构造对象写回数据
                                    Field subject = rawResponse.getClass().getDeclaredField("inputStreamSubject");
                                    subject.setAccessible(true);
                                    subject.set(rawResponse, inputSubjectObject);
                                    baos.close();
                                    if(MyThreadLocal.getInstance().get() != null) {
                                        MyThreadLocal.getInstance().set(str);
                                    }
                                }
                            }
                        }
                    });
            //保存rd.j对象
            XposedHelpers.findAndHookMethod("com.sankuai.waimai.platform.capacity.network.retrofit.b",
                    context.getClassLoader(),
                    "a",
                    XposedHelpers.findClass("rx.d", context.getClassLoader()),
                    XposedHelpers.findClass("rx.j", context.getClassLoader()),
                    Object.class,
                    new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            rx_jObject = param.args[1];
                        }
                    }
            );


            XposedHelpers.findAndHookMethod("com.sankuai.waimai.platform.capacity.network.retrofit.b",
                    context.getClassLoader(),
                    "a",
                    Class.class,
                    new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            if (param.args[0].toString().contains("com.sankuai.waimai.business.page.home.model.API")){
                                //保存接口实现对象...
                                Log.e("EDXposed","已获得 ApiService 对象的实现类对象");
                                meituanApiClassObject = param.getResult();
                            }
                        }
                    });
            XposedHelpers.findAndHookMethod("com.sankuai.waimai.store.base.net.sg.a",
                    context.getClassLoader(),
                    "a",
                    Object.class,
                    new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            Log.e("EDXposed",param.args[0].toString());
                            Object resObj = param.getResult();
                            Log.e("EDXposed", "已获得 SCApiService 对象的实现类对象" + param.args[0].toString());
                            if (param.args[0].toString().contains("PoiVerticalityHomeActivity")) {
                                Field f = resObj.getClass().getField("b");
                                resObj = f.get(resObj);
                                Log.e("EDXposed",resObj.getClass().getName());
                                for (Method m : resObj.getClass().getDeclaredMethods()){
                                    Log.e("EDXposed",m.getName());
                                }
                                meituanSCApiClassObject = resObj;
                            }
                        }
                    });
            }


    0x002. 以上代码包含启动http服务,接下来就是开放http的服务提供api接口来访问了,代码如下:


package com.o2o.http.api;

import android.content.Context;
import android.os.Build;
import android.util.Log;

import com.lody.virtual.client.NativeEngine;

import java.io.InputStream;
import java.lang.reflect.Field;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import de.robv.android.xposed.XposedHelpers;
import fi.iki.elonen.NanoHTTPD;
import io.busniess.va.delegate.MyComponentDelegate;

public class MeiTuanServer extends NanoHTTPD {


    public MeiTuanServer(int port){
        super(port);
    }

    public MeiTuanServer(String hostname, int port) {
        super(hostname, port);
    }

    /**
     * 美团流程处理
     *
     * @param session
     * @return
     * @throws Exception
     */
    //开放http服务请求到这里
    @Override
    public Response serve(IHTTPSession session){
        Method requestMethod = session.getMethod();
        Map<String, String> header = session.getHeaders();
        Map<String, String> parameters = session.getParms();
        InputStream in = HttpServer.class.getResourceAsStream(session.getUri());
        String uri = session.getUri().substring(1);
        StringBuffer sb = new StringBuffer();
        Map<String,Object> responseMap = new HashMap<>();
        //获取当前定位下的美食分类数据 接口实现类 API 对象
//        Object meituanApiClassObject = MyComponentDelegate.meituanApiClassObject;
        //获得超市便利等下的分类接口的实现类对象 SCApi 对象
//        MyComponentDelegate.meituanSCApiClassObject;
        String method = parameters.get("method");
        String str = "{\"msg\":\"未知方法名称\",\"method\":\""+method+"\",\"code\":300}";

        if(NanoHTTPD.Method.GET.equals(requestMethod)) {
            MyThreadLocal.getInstance().set("getHttpResult");
            if (method.equals("category")) {
                try {
                    java.lang.reflect.Method m = MyComponentDelegate.meituanApiClassObject.getClass().getDeclaredMethod("getHomeNewRcmdboard",
                            int.class,
                            String.class,
                            String.class,
                            String.class,
                            String.class,
                            String.class,
                            String.class,
                            int.class,
                            String.class);
                    //获取返回结果对象,res.a.call 反射调用 请求就发出去了
                    Object res = m.invoke(MyComponentDelegate.meituanApiClassObject, 0, "", "", null, null, null, "", 0, "");
                    //获取参数2 回调函数, 返回的数据会在 rx_jObject 下的onNext的回调函数中传入
                    Object rx_jObject = MyComponentDelegate.rx_jObject;
                    Field d = res.getClass().getDeclaredField("a");
                    d.setAccessible(true);
                    Object a = d.get(res);
                    java.lang.reflect.Method m1 = a.getClass().getDeclaredMethod("call", XposedHelpers.findClass("rx.j", MyComponentDelegate.classLoader));
                    m1.setAccessible(true);
                    m1.invoke(a, rx_jObject);
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getName());
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getMethods().length);
                    str = MyThreadLocal.getInstance().get();
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e("EDXposed", e.getLocalizedMessage());
                }
                Log.e("EDXposed", "----====----====----====----====----====----====----====----");
            } else if (method.equals("sonCategory")) {
                String categoryId = parameters.get("categoryId");
                try {
                    java.lang.reflect.Method m = MyComponentDelegate.meituanSCApiClassObject.getClass().getDeclaredMethod("getQuickBuyHomeNew",
                            String.class,
                            String.class,
                            long.class,
                            String.class,
                            String.class,
                            String.class,
                            String.class);

                    Log.e("EDXposed","meituanSCApiClassObject == null :" + (MyComponentDelegate.meituanSCApiClassObject == null) );
                    Log.e("EDXposed","rx_jObject == null :" + ( MyComponentDelegate.rx_jObject == null) );

                    //获取返回结果对象,res.a.call 反射调用 请求就发出去了
                    Object res = m.invoke(MyComponentDelegate.meituanSCApiClassObject, categoryId, "0", 0, "", "", null, "");
                    //获取参数2 回调函数, 返回的数据会在 rx_jObject 下的onNext的回调函数中传入
                    Object rx_jObject = MyComponentDelegate.rx_jObject;
                    Field d = res.getClass().getDeclaredField("a");
                    d.setAccessible(true);
                    Object a = d.get(res);
                    java.lang.reflect.Method m1 = a.getClass().getDeclaredMethod("call", XposedHelpers.findClass("rx.j", MyComponentDelegate.classLoader));
                    m1.setAccessible(true);
                    m1.invoke(a, rx_jObject);
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getName());
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getMethods().length);
                    str = MyThreadLocal.getInstance().get();
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e("EDXposed", e.getLocalizedMessage());
                }
                Log.e("EDXposed", "----====----====----====----====----====----====----====----");
            } else if (method.equals("shopListCategory")) {
                String categoryType = parameters.get("categoryType");
                String page = parameters.get("page");
                try {
                    java.lang.reflect.Method m = MyComponentDelegate.meituanSCApiClassObject.getClass().getDeclaredMethod("getPoiVerticalitylistNew",
                            long.class,
                            String.class,
                            long.class,
                            int.class,
                            long.class,
                            long.class,
                            String.class,
                            String.class,
                            String.class,
                            int.class,
                            String.class,
                            String.class,
                            String.class,
                            int.class,
                            int.class,
                            int.class);
                    //获取返回结果对象,res.a.call 反射调用 请求就发出去了
                    /**
                     * @Field("category_type") long j          参数值:102603
                     * @Field("second_category_type") String str          参数值:0 默认值
                     * @Field("page_index") long j2          参数值:0
                     * @Field("page_size") int i          参数值:20
                     * @Field("navigate_type") long j3          参数值:102603
                     * @Field("sort_type") long j4          参数值:0 参数  排序 1为销量排序,2为配送速度排序
                     * @Field("rank_trace_id") String str2          参数值:null
                     * @Field("session_id") String str3          参数值:4386694b-6fbe-4f8a-8b79-9054707d00481606627897162354
                     * @Field("union_id") String str4          参数值:c872330147a049b1b4dd7289d5bfe0b6a160616579659223891
                     * @Field("is_home_page") int i2          参数值:0
                     * @Field("activity_filter_codes") String str5          参数值:null
                     * @Field("pageSource") String str6          参数值:sg_homepage
                     * @Field("spu_filter_codes") String str7          参数值:null
                     * @Field("template_code") int i3          参数值:0
                     * @Field("request_type") int i4          参数值:0
                     * @Field("is_partial_refresh") int i5          参数值:0
                     */

                    Log.e("EDXposed","meituanSCApiClassObject == null :" + (MyComponentDelegate.meituanSCApiClassObject == null) );
                    Log.e("EDXposed","rx_jObject == null :" + ( MyComponentDelegate.rx_jObject == null) );
                    Object res = m.invoke(MyComponentDelegate.meituanSCApiClassObject,
                            Long.valueOf(categoryType), "0", Long.valueOf(page) - 1, 20,
                            Long.valueOf(categoryType), 0,
                            null, "", "", 1, null, "sg_homepage", null, 0, 0, 0);
                    //获取参数2 回调函数, 返回的数据会在 rx_jObject 下的onNext的回调函数中传入
                    Object rx_jObject = MyComponentDelegate.rx_jObject;
                    Field d = res.getClass().getDeclaredField("a");
                    d.setAccessible(true);
                    Object a = d.get(res);
                    java.lang.reflect.Method m1 = a.getClass().getDeclaredMethod("call", XposedHelpers.findClass("rx.j", MyComponentDelegate.classLoader));
                    m1.setAccessible(true);
                    m1.invoke(a, rx_jObject);
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getName());
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getMethods().length);
                    str = MyThreadLocal.getInstance().get();
                } catch (Exception e) {
                    Log.e("EDXposed", e.getLocalizedMessage());
                    e.printStackTrace();
                }
                Log.e("EDXposed", "----====----====----====----====----====----====----====----");
            } else if (method.equals("shopMenu")) {
                String poiId = parameters.get("poiId");
                /**
                 * @Field("wm_poi_id") long j      参数1:1053887408869739
                 * @Field("product_spu_id") Long l      参数2:null
                 * @Field("page_index") int i      参数3:0
                 * @Field("tag_id") Long l2      参数4:-1
                 * @Field("extra") String str      参数5:{"source_id":"2"}
                 */
                try {

                    Log.e("EDXposed","meituanSCApiClassObject == null :" + (MyComponentDelegate.meituanSCApiClassObject == null) );
                    Log.e("EDXposed","rx_jObject == null :" + ( MyComponentDelegate.rx_jObject == null) );
                    java.lang.reflect.Method m = MyComponentDelegate.meituanSCApiClassObject.getClass().getDeclaredMethod("getShopMenu",
                            long.class,
                            Long.class,
                            int.class,
                            Long.class,
                            String.class);
                    Object res = m.invoke(MyComponentDelegate.meituanSCApiClassObject,
                            Long.valueOf(poiId), null, 0, -1L,
                            "{\"source_id\":\"1\"}");
                    //获取参数2 回调函数, 返回的数据会在 rx_jObject 下的onNext的回调函数中传入
                    Object rx_jObject = MyComponentDelegate.rx_jObject;
                    Field d = res.getClass().getDeclaredField("a");
                    d.setAccessible(true);
                    Object a = d.get(res);
                    java.lang.reflect.Method m1 = a.getClass().getDeclaredMethod("call", XposedHelpers.findClass("rx.j", MyComponentDelegate.classLoader));
                    m1.setAccessible(true);
                    m1.invoke(a, rx_jObject);
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getName());
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getMethods().length);
                    str = MyThreadLocal.getInstance().get();
                    Log.e("EDXposed","hook返回结果:   " + str);
                } catch (Exception e) {
                    Log.e("EDXposed", e.getLocalizedMessage());
                    e.printStackTrace();
                }
            }else if (method.equals("getProducts")) {
                String poiId = parameters.get("poiId");
                String tagCode = parameters.get("tagCode");
                String pageNum = parameters.get("pageNum");
                String tagType = parameters.get("tagType");
                /**
                 * @Field("page_index") int i                 参数1:0
                 * @Field("spu_tag_id") String str            参数2:act_17_17
                 * @Field("wm_poi_id") String str2            参数3:1053887408935275
                 * @Field("tag_type") int i2                  参数4:2
                 * @Field("sort_type") int i3                 参数5:1
                 * @Field("is_support_smooth_render") int i4  参数6:1
                 * @Field("product_spu_id") long j            参数7:-1
                 * @Field("brand_ids") String str3            参数8:null
                 * @Field("extra") String str4                参数9:
                 * @Field("smooth_render_type") String str5   参数10:0
                 */
                try {

                    Log.e("EDXposed","meituanSCApiClassObject == null :" + (MyComponentDelegate.meituanSCApiClassObject == null) );
                    Log.e("EDXposed","rx_jObject == null :" + ( MyComponentDelegate.rx_jObject == null) );
                    java.lang.reflect.Method m = MyComponentDelegate.meituanSCApiClassObject.getClass().getDeclaredMethod("getProducts",
                            int.class,
                            String.class,
                            String.class,
                            int.class,
                            int.class,
                            int.class,
                            long.class,
                            String.class,
                            String.class,
                            String.class);
                    Object res = m.invoke(MyComponentDelegate.meituanSCApiClassObject,
                            Integer.valueOf(pageNum) - 1, tagCode, poiId, Integer.valueOf(tagType),
                            1, 1, -1L, null, "", "0");
                    //获取参数2 回调函数, 返回的数据会在 rx_jObject 下的onNext的回调函数中传入
                    Object rx_jObject = MyComponentDelegate.rx_jObject;
                    Field d = res.getClass().getDeclaredField("a");
                    d.setAccessible(true);
                    Object a = d.get(res);
                    java.lang.reflect.Method m1 = a.getClass().getDeclaredMethod("call", XposedHelpers.findClass("rx.j", MyComponentDelegate.classLoader));
                    m1.setAccessible(true);
                    m1.invoke(a, rx_jObject);
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getName());
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getMethods().length);
                    str = MyThreadLocal.getInstance().get();
                } catch (Exception e) {
                    Log.e("EDXposed", e.getLocalizedMessage());
                    e.printStackTrace();
                }
            }else if(method.equals("getProductsByIds")) {
                String poiId = parameters.get("poiId");
                String tagCode = parameters.get("tagCode");
                String tagType = parameters.get("tagType");
                String spuIds = parameters.get("spuIds");
                String traceId = parameters.get("traceId");
                /**
                 * @Field("wm_poi_id") String strd             参数1: poiId
                 * @Field("spu_tag_id") String str2d           参数2: spu_tag_id
                 * @Field("tag_type") int id                   参数3: tag_type
                 * @Field("spuIds") String str3d               参数4: spuIds
                 * @Field("trace_id") String str4              参数5: trace_id
                 */
                try {

                    Log.e("EDXposed","meituanSCApiClassObject == null :" + (MyComponentDelegate.meituanSCApiClassObject == null) );
                    Log.e("EDXposed","rx_jObject == null :" + ( MyComponentDelegate.rx_jObject == null) );
                    java.lang.reflect.Method m = MyComponentDelegate.meituanSCApiClassObject.getClass().getDeclaredMethod("getProductsByIds",
                            String.class,
                            String.class,
                            int.class,
                            String.class,
                            String.class);
                    Object res = m.invoke(MyComponentDelegate.meituanSCApiClassObject, poiId, tagCode, Integer.valueOf(tagType), spuIds, traceId);
                    //获取参数2 回调函数, 返回的数据会在 rx_jObject 下的onNext的回调函数中传入
                    Object rx_jObject = MyComponentDelegate.rx_jObject;
                    Field d = res.getClass().getDeclaredField("a");
                    d.setAccessible(true);
                    Object a = d.get(res);
                    java.lang.reflect.Method m1 = a.getClass().getDeclaredMethod("call", XposedHelpers.findClass("rx.j", MyComponentDelegate.classLoader));
                    m1.setAccessible(true);
                    m1.invoke(a, rx_jObject);
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getName());
                    Log.e("EDXposed", "反射调用函数返回值为:" + rx_jObject.getClass().getMethods().length);
                    str = MyThreadLocal.getInstance().get();
                } catch (Exception e) {
                    Log.e("EDXposed", e.getLocalizedMessage());
                    e.printStackTrace();
                }
            }else if(method.equals("searchShopGoods")){
                try {
                    java.lang.reflect.Method m = MyComponentDelegate.postFormRequestObject.getClass().getDeclaredMethod("postFormRequest",Map.class,String.class,Map.class,Map.class);
                    String poiId = parameters.get("poiId");
                    String keyword = parameters.get("keyword");
                    String page_size = parameters.get("pageSize");
                    String url = "v2/search/inshop/products";
                    String page_index = String.valueOf(Integer.parseInt(parameters.get("pageIndex"))-1);
                    Map<String,String> map1 = new HashMap<String,String>();
                    map1.put("Cat_Extra","");
                    Map<String,Object> map2 = new HashMap<String,Object>();
                    map2.put("cn_pt","RN");
                    Map<String,Object> map3 = new HashMap<String,Object>();
                    map3.put("sort_type","1");//1销量排序 默认排序
                    map3.put("poisearch_global_id", "-999");
                    map3.put("page_index",page_index);
                    map3.put("tag_id","");
                    map3.put("filter_types","");
                    map3.put("keyword",keyword);
                    map3.put("wmPoiId",poiId);
                    map3.put("page_size",page_size);
                    Object res = m.invoke(MyComponentDelegate.postFormRequestObject,map1,url,map2,map3);
                    m = res.getClass().getDeclaredMethod("execute");
                    res = m.invoke(res);
                    m = res.getClass().getDeclaredMethod("body");
                    res = m.invoke(res);
                    m = res.getClass().getMethod("toString");
                    str = (String)m.invoke(res);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else {
                str = "{msg:\"未知方法名称,结束~\"}";
            }
        }else{
            str = "{msg:\"暂不支持post方式请求、\"}";
        }
        return newFixedLengthResponse(NanoHTTPD.Response.Status.OK, "application/json", str);
    }

    /**
     * 将map转换成url
     *
     * @param map
     * @return
     */
    public static String getUrlParamsByMap(Map<String, String> map) {
        if (map == null) {
            return "";
        }
        StringBuffer sb = new StringBuffer();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            sb.append(entry.getKey() + "=" + entry.getValue());
            sb.append("&");
        }
        String s = sb.toString();
        if (s.endsWith("&")) {
            s = s.substring(0, s.length() - 1);
        }
        return s;
    }
}



    0x003. 所有函数调用过程中无需考虑加密,签名等问题,只需要传参数即可,美团APP已经封装好了,只要调用即可自动加上去,给大家看看他的Interface的接口类是如何定义的 (注意他这里是没有实现类的,他用的是动态代理来实现的,所以这里要提前拿到他的动态代理类对象,然后通过反射的方式就可以调用实现类的函数了.) :

请求接口定义



    0x004. 他这里调用完返回的是一个d类型的泛型,这个返回值回来的时候 并没有发送发送请求,需要通过反射 得到返回值对象里面的a类型变量,然后通过反射调用a类下的call函数,这样就触发了网络请求,然后通过hook的方式就得到了返回数据,如果需要保证多线程运行,使用ThreadLocal即可,在合适的地方 写入,合适的地方获取就可以了。我上面的代码就是用的这种方式

返回值的处理



    0x005. 返回值对象

网络请求返回值对象



发送网络请求



发送网络请求



    0x006. 通过api就完成了一个请求并且可以获取到返回值,流程通了,接下来就要考虑封设备的问题,我这里用的VirtualApp沙盒来做的,美团上报设备信息如下(125个字段数据):

{
    "appVersion": "11.3.402",
    "simCountryIso": "unknown",
    "amvendor": "bmi160_acc", //字段值
    "gss": "ABSENT",
    "cpu_core": "8",  // cpu核心数量 读取文件 /proc/cpuinfo 遍历
    "stgyruntime": 0,
    "type": "user",    //Build.TYPE
    "resolution": "1080*2196", //分辨率  DisplayMetrics v0_1 = this.d.getResources().getDisplayMetrics();
                                               // String v0_2 = v0_1.widthPixels + "*" + v0_1.heightPixels.replace("&", "");
    "amname": "ACCELEROMETER",
    "hostname": "c5-miui-ota-bd29.bj",  //Build.Host
    "fingerprint": "Redmi/merlin/merlin:10/QP1A.190711.020/V12.0.5.0.QJOCNXM:user/release-keys",
    "model": "M2003J15SC", //Build.MODEL
    "id": "QP1A.190711.020",//Build.ID (ro.build.id)
    "roam": "0",            //TelephonyManager().TelephonyManager().isNetworkRoaming();
    "brand": "Redmi",       //Build.BRAND      ro.product.brand
    "hardware": "mt6768",   //Build.HARDWARE   ro.hardware
    "wifi": "1",            // hasSystemFeature("android.hardware.wifi") 是否有wifi模块
    "dtk_token": "3.2.4.025",
    "lightSensor": "{\"name\":\"LIGHT\",\"vendor\":\"stk3x3x_l\",\"data\":[139.0]}",
    "ip": "1.1.1.1",
    "uevent": "unknown",
    "siua-timerand": "fd503507-0d35-42a5-9b14-857cd570e16d",
    "timeZone": "[GMT+08:00,Asia/Shanghai]",
    "optional": "unknown",
    "randomMacAddress": "98:f6:21:58:f6:4d",  // NetworkInterface "wlan0" 的mac
    "isProxy": "0",
    "version": "10",
    "tags": "release-keys",
    "nearbyBaseStation": "unknown",
    "df_uuid": "0000000000000C872330147A049B1B4DD7289D5BFE0B6A160616579659223891", //服务器返回数据
    "sdkVersion": "1.1",
    "installtime": "1606307852256",
    "baseStation": "[]",
    "gss2": "unknown",
    "device": "merlin",
    "suc": "adb",
    "photo_hash": "{\"photoList\":[],\"number\":0}",
    "wifiList": "[]",
    "battery": "[5,100]",
    "bluetooth_le": "1",
    "localizers": "fetch list error",
    "manufacturer": "Xiaomi",
    "sus": "adb",
    "gvb": "MOLY.LR12A.R3.MP.V98.P57,MOLY.LR12A.R3.MP.V98.P57",
    "androidSysApp10": "com.mediatek.ims-com.mediatek.op01.phone.plugin-com.android.cts.priv.ctsshim-com.miui.contentextension-com.android.internal.display.cutout.emulation.corner-com.android.internal.display.cutout.emulation.double-com.android.providers.telephony-com.android.dynsystem-com.miui.powerkeeper-com.goodix.fingerprint",
    "gvri": "android reference-ril 1.0",
    "prop": "1230768000000",
    "IMSI": "unknown",
    "dpi": "440",
    "timestamp": "1607504054517",
    "networkCountryIso": "cn",
    "product": "merlin",
    "phoneType": "unknown",
    "business": "bus",
    "ch": "MTGuard",
    "usb_access": "1",
    "coordinates": "unknown",
    "startupTime": "1607337157",
    "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; M2003J15SC MIUI/V12.0.5.0.QJOCNXM)",
    "totalMemory": "3936903168",
    "availableMemory": "1147514880",
    "debuggable": "0",
    "sensorList": "9578f8de16885018417f98cf9fcd3e7e", //传感器列表数据 MD5 自己写了小APP 相同手机得出结果一致
    "runningList": "unknown",
    "firstlaunchtime": "1607504054333",
    "board": "merlin",
    "magic": "3.2.4.025",
    "cpuUsage": "unknown",
    "existPipe": "0",
    "voiceMailNumber": "unknown",
    "dpid": "3.2.4.025",
    "language": "zh",
    "source": "MTGuard",
    "secure": "1",
    "radio": "unknown",
    "gps_location": "1",
    "existQemu": "0",
    "androidAppCnt": "295",
    "music_hash": "{\"hashInfo\":[],\"number\":0}",
    "isVPN": "1",
    "androidId": "f75374e82580de95",
    "sim_mobile": "unknown",
    "dataState": "0",
    "nfc": "0",
    "batterychange": "1",
    "telephony": "1",
    "gravendor": "MTK",
    "region": "CN",
    "dataActivity": "0",
    "stgyspitep": "0",
    "app_dection": "AA==\n",
    "simSerialNumber": "unknown",
    "platform": "android",
    "wifiMacAddress": "unknown",
    "availableSD": "101505351680",
    "wi": "wlan0",
    "displayRom": "AL2522-Merlin-V101-Q-0811",
    "graname": "GRAVITY",
    "bootloader": "unknown",
    "totalSD": "112736419840",
    "rooted": "1",
    "packageName": "com.sankuai.meituan",
    "networkType": "WIFI",
    "misc": "ad921d60486366258809553a3db49a4a",
    "temp": "0",
    "psuc": "adb",
    "cpufreq": "1800000", //cpu频率 读取文件 /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
    "appCache": "340744",
    "IMEI": "unknown",  //高版本系统无法获取
    "androidApp10": "com.miui.screenrecorder-com.mi.liveassistant-com.sollyu.xposed.hook.model-com.zx.Justmeplush-com.sankuai.meituan-com.github.kr328.clash-com.ss.android.ugc.aweme.lite-io.busniess.va-com.baidu.input_mi-com.miui.userguide",
    "isSupportBluetooth": "1",
    "stgysimulatorinfo": "AAAA",
    "mno": "unknown",
    "availableSystem": "101505351680",
    "voltage": "0",
    "cpuABI": "arm64-v8a,armeabi-v7a,armeabi",
    "brightness": "1.745098",
    "kernel_version": "unknown",
    "bluetooth": "unknown",
    "serial": "unknown",
    "currentWifi": "[{\"bssid\":\"\",\"ssid\":\"\",\"rssi\":-47}]",
    "systemVolume": "0",
    "totalSystem": "112736419840",
    "user": "builder",
    "account": "ad921d60486366258809553a3db49a4a"
}


    0x007. 改机需要修改java层和so层,so层主要是通过 __system_property_get函数来获取的,hook这个函数,还有java层通过反射写入BUILD类下的字段,还会读取系统文件等,全部都要构造后才可使设备为新设备:

重定向系统文件



    0x008. 以下为示例设备信息,将会在so和java层全部完成替换,so层的hook代码就不发出来了,强调以下传感器的值也挺重要的:


{
    "cpuInfo": "Processor\t: AArch64 Processor rev 0 (aarch64)\nprocessor\t: 0\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x41\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd05\nCPU revision\t: 0\n\nprocessor\t: 1\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x41\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd05\nCPU revision\t: 0\n\nprocessor\t: 2\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x41\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd05\nCPU revision\t: 0\n\nprocessor\t: 3\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x41\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd05\nCPU revision\t: 0\n\nprocessor\t: 4\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x48\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd40\nCPU revision\t: 0\n\nprocessor\t: 5\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x48\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd40\nCPU revision\t: 0\n\nprocessor\t: 6\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x48\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd40\nCPU revision\t: 0\n\nprocessor\t: 7\nmodel name\t: ARMv8 Processor rev 0 (v8l)\nBogoMIPS\t: 3.84\nFeatures\t: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32\nCPU implementer\t: 0x48\nCPU architecture: 8\nCPU variant\t: 0x1\nCPU part\t: 0xd40\nCPU revision\t: 0\n\nHardware\t: Hisilicon Kirin980\n",
    "fingerprint": {},
    "memInfo": "MemTotal:        7722844 kB\nMemFree:          325096 kB\nMemAvailable:    2262376 kB\nBuffers:            3748 kB\nCached:          2156928 kB\nSwapCached:        37760 kB\nActive:          2344736 kB\nInactive:        1613000 kB\nActive(anon):    1546544 kB\nInactive(anon):   470256 kB\nActive(file):     798192 kB\nInactive(file):  1142744 kB\nUnevictable:      158832 kB\nMlocked:          158832 kB\nSwapTotal:       4194300 kB\nSwapFree:        1900464 kB\nDirty:              1988 kB\nWriteback:             0 kB\nAnonPages:       1948520 kB\nMapped:           667604 kB\nShmem:             70012 kB\nSlab:             630756 kB\nSReclaimable:     238712 kB\nSUnreclaim:       392044 kB\nKernelStack:      125200 kB\nPageTables:       133932 kB\nNFS_Unstable:          0 kB\nBounce:                0 kB\nWritebackTmp:          0 kB\nCommitLimit:     8055720 kB\nCommitted_AS:   137772920 kB\nVmallocTotal:   263061440 kB\nVmallocUsed:           0 kB\nVmallocChunk:          0 kB\nCmaTotal:        1310720 kB\nCmaFree:           49532 kB\nIonTotalCache:         0 kB\nIonTotalUsed:     327972 kB\nRsvTotalUsed:     412676 kB\n",
    "properties": {
        "aaudio.mmap_exclusive_policy": "1",
        "aaudio.mmap_policy": "2",
        "bastet.service.enable": "true",
        "bg_fsck.pgid": "473",
        "bt.dpbap.enable": "1",
        "bt.max.hfpclient.connections": "2",
        "com.ss.android.article.news": "tt_huawei2019_yz",
        "config.disable_consumerir": "false",
        "config.hw.power.saving.always.netconnect": "false",
        "config.hw.power.saving.autoquit": "false",
        "dalvik.vm.appimageformat": "lz4",
        "dalvik.vm.boot-dex2oat-threads": "4",
        "dalvik.vm.checkjni": "false",
        "dalvik.vm.dex2oat-Xms": "64m",
        "dalvik.vm.dex2oat-Xmx": "512m",
        "dalvik.vm.dex2oat-max-image-block-size": "1048576",
        "dalvik.vm.dex2oat-minidebuginfo": "true",
        "dalvik.vm.dex2oat-resolve-startup-strings": "true",
        "dalvik.vm.dex2oat-threads": "4",
        "dalvik.vm.dexopt.secondary": "true",
        "dalvik.vm.heapgrowthlimit": "384m",
        "dalvik.vm.heapmaxfree": "8m",
        "dalvik.vm.heapminfree": "2m",
        "dalvik.vm.heapsize": "512m",
        "dalvik.vm.heapstartsize": "8m",
        "dalvik.vm.heaptargetutilization": "0.75",
        "dalvik.vm.image-dex2oat-Xms": "64m",
        "dalvik.vm.image-dex2oat-Xmx": "64m",
        "dalvik.vm.image-dex2oat-threads": "4",
        "dalvik.vm.isa.arm.features": "default",
        "dalvik.vm.isa.arm.variant": "cortex-a15",
        "dalvik.vm.isa.arm64.features": "default",
        "dalvik.vm.isa.arm64.variant": "generic",
        "dalvik.vm.minidebuginfo": "true",
        "dalvik.vm.stack-trace-file": "/data/anr/traces.txt",
        "dalvik.vm.usejit": "true",
        "dalvik.vm.usejitprofiles": "true",
        "debug.atrace.tags.enableflags": "0",
        "debug.force_rtl": "false",
        "debug.sf.disable_backpressure": "1",
        "debug.sf.latch_unsignaled": "1",
        "dev.bootcomplete": "1",
        "dev.mnt.blk.cache": "sdd",
        "dev.mnt.blk.cust": "dm-7",
        "dev.mnt.blk.data": "sdd",
        "dev.mnt.blk.hw_product": "dm-8",
        "dev.mnt.blk.mnt.hisee_fs": "sdd",
        "dev.mnt.blk.mnt.modem.mnvm2:0": "sdd",
        "dev.mnt.blk.mnt.modem.modem_secure": "sdd",
        "dev.mnt.blk.odm": "dm-9",
        "dev.mnt.blk.patch_hw": "dm-5",
        "dev.mnt.blk.preas": "dm-10",
        "dev.mnt.blk.preavs": "dm-11",
        "dev.mnt.blk.preload": "dm-12",
        "dev.mnt.blk.prets": "dm-13",
        "dev.mnt.blk.pretvs": "dm-14",
        "dev.mnt.blk.root": "dm-6",
        "dev.mnt.blk.sec_storage": "sdd",
        "dev.mnt.blk.splash2": "sdd",
        "dev.mnt.blk.vendor": "dm-15",
        "dev.mnt.blk.vendor.modem.modem_driver": "dm-16",
        "dev.mnt.blk.vendor.modem.modem_fw": "sdd",
        "dev.mnt.blk.version": "dm-17",
        "drm.service.enabled": "true",
        "fw.max_users": "4",
        "fw.show_multiuserui": "1",
        "gsm.RBActivated0": "",
        "gsm.RBActivated1": "",
        "gsm.current.phone-type": "1,1",
        "gsm.data.gsm_only_not_allow_ps": "false,false",
        "gsm.default.apn": "3gnet",
        "gsm.defaultpdpcontext.active": "true",
        "gsm.dualcards.switch": "false",
        "gsm.huawei.RemindDataService": "false",
        "gsm.huawei.RemindDataService_1": "false",
        "gsm.hw.cust.ecclist0": "000,08,118,110,119,120,122,999",
        "gsm.hw.cust.ecclist1": "000,08,118,110,119,120,122,999",
        "gsm.hw.matchnum": "11",
        "gsm.hw.matchnum.short": "11",
        "gsm.hw.matchnum.short0": "11",
        "gsm.hw.matchnum.short1": "11",
        "gsm.hw.matchnum.vmn_shortcode": "0",
        "gsm.hw.matchnum0": "11",
        "gsm.hw.matchnum1": "11",
        "gsm.hw.operator.iso-country": "cn",
        "gsm.hw.operator.isroaming": "false",
        "gsm.hw.operator.numeric": "46000",
        "gsm.hw.operator.numeric.old": "46000",
        "gsm.modem.version.baseband": "21C20B379S000C000,21C20B379S000C000",
        "gsm.national_roaming.apn": "46003",
        "gsm.network.type": "LTE,LTE",
        "gsm.nitz.time": "1598321150017",
        "gsm.nitz.timereference": "805414015",
        "gsm.nvcfg.resetrild": "0",
        "gsm.nvcfg.rildrestarting": "0",
        "gsm.operator.alpha": "中国移动,中国联通",
        "gsm.operator.alpha.vsim": "",
        "gsm.operator.iso-country": "cn,cn",
        "gsm.operator.iso-country.vsim": "",
        "gsm.operator.isroaming": "false,false",
        "gsm.operator.numeric": "46000,46001",
        "gsm.operator.numeric.vsim": "",
        "gsm.rssi.sim1": "-100",
        "gsm.rssi.sim2": "-83",
        "gsm.sigcust.configured": "true",
        "gsm.sim.hw_atr": "3B9F95801FC38031E073FE21135786810286984418A8",
        "gsm.sim.hw_atr1": "3B9C95801FC78031E073FE21136420C0300F04",
        "gsm.sim.num.pin": "3",
        "gsm.sim.num.pin2": "3",
        "gsm.sim.num.puk": "10",
        "gsm.sim.num.puk2": "10",
        "gsm.sim.num.simlock": "-1,-1,-1,-1",
        "gsm.sim.operator.alpha": "CMCC,China Unicom",
        "gsm.sim.operator.iso-country": "cn,cn",
        "gsm.sim.operator.numeric": "46007,46001",
        "gsm.sim.preiccid_0": "898600D",
        "gsm.sim.preiccid_1": "8986011",
        "gsm.sim.state": "LOADED,LOADED",
        "gsm.sim.updatenitz": "1",
        "gsm.sim1.num.simlock": "-1,-1,-1,-1",
        "gsm.sim1.type": "20",
        "gsm.sim2.type": "20",
        "gsm.singlepdp.hplmn.matched0": "false",
        "gsm.singlepdp.hplmn.matched1": "false",
        "gsm.slot1.num.pin1": "3",
        "gsm.slot1.num.pin2": "3",
        "gsm.slot1.num.puk1": "10",
        "gsm.slot1.num.puk2": "10",
        "gsm.slot2.num.pin1": "3",
        "gsm.slot2.num.pin2": "3",
        "gsm.slot2.num.puk1": "10",
        "gsm.slot2.num.puk2": "10",
        "gsm.sms.max.message.size": "0",
        "gsm.sms.to.mms.textthreshold": "0",
        "gsm.version.baseband": "21C20B379S000C000,21C20B379S000C000",
        "gsm.version.ril-impl": "android infineon balong-ril 1.0",
        "gsm.vsim.state": "ABSENT",
        "hilog.tag": "I",
        "hsdf.keyguard.disable_musicsport_style": "false",
        "hw.config.show_am_pm": "true",
        "hw.hicure.dns_fail_count": "134",
        "hw.lcd.density": "480",
        "hw.pc.support.app.projection": "true",
        "hw.wifipro.dns_fail_count": "1",
        "hw.wifipro.uid_dns_fail_count": "10130-28/10025-5/1000-2/10244-2/1001-2/10052-52/10081-3/10148-116",
        "hw_emui_hwperf_all_prop": "1 1 0 1 0,3000:30000:12000 -1 ",
        "hw_mc.connectivity.airplane_enable_wifi_bt": "0",
        "hw_mc.deskclock.enable_alarmring": "true",
        "hw_mc.feature.accelerate_sliding": "true",
        "hw_mc.gallery3d.decode_hme": "true",
        "hw_mc.hicall.screensharing": "true",
        "hw_mc.launcher.disable_back_hotzone_fullscreen": "true",
        "hw_mc.multidevice.fams_enable": "true",
        "hw_mc.multiscreen.castfeature_enable": "true",
        "hw_mc.multiscreen.collaboration.value": "3",
        "hw_mc.multiscreen.mdms.value": "1",
        "hw_mc.settings.new_navi_show": "false",
        "hw_mc.telephony.rat_changed_delay": "true",
        "hw_sc.foreground_data_opt_enable": "true",
        "hw_sc.only_ipv6_allowed_cure": "true",
        "hwouc.hwpatch.version": "10.1.0.163(C00E160R1P8patch01)",
        "hwouc.update_engine.times": "0",
        "hwouc.update_engine.up": "false",
        "hwservicemanager.ready": "true",
        "init.svc.AGPService": "running",
        "init.svc.CameraDaemon": "running",
        "init.svc.activityrecognition_1_1": "running",
        "init.svc.adbd": "stopped",
        "init.svc.apexd": "running",
        "init.svc.apexd-bootstrap": "stopped",
        "init.svc.applogcat": "stopped",
        "init.svc.aptouch": "running",
        "init.svc.ashmemd": "running",
        "init.svc.audioserver": "running",
        "init.svc.bastetd": "running",
        "init.svc.bms_auth": "stopped",
        "init.svc.bms_event": "running",
        "init.svc.bms_limit": "stopped",
        "init.svc.bms_limit_n": "stopped",
        "init.svc.bms_soc": "stopped",
        "init.svc.bootanim": "stopped",
        "init.svc.bpfloader": "stopped",
        "init.svc.bsoh": "running",
        "init.svc.cameraserver": "running",
        "init.svc.chargelogcat": "stopped",
        "init.svc.chargemonitor": "stopped",
        "init.svc.cust_from_init": "stopped",
        "init.svc.display-hal-1-0": "running",
        "init.svc.displayengine-hal-1-2": "running",
        "init.svc.displayservice": "running",
        "init.svc.distributedfiledaemon": "running",
        "init.svc.distributedfileservice": "stopped",
        "init.svc.dms-hal-1-0": "running",
        "init.svc.dpeservice": "running",
        "init.svc.drm": "running",
        "init.svc.dubai-hal-1-1": "running",
        "init.svc.dubaid": "running",
        "init.svc.emcomd": "running",
        "init.svc.eventslogcat": "stopped",
        "init.svc.face_hal": "running",
        "init.svc.fm-1-0": "running",
        "init.svc.fps_hal_ext": "running",
        "init.svc.fusd": "running",
        "init.svc.gatekeeperd": "running",
        "init.svc.gpsdaemon": "stopped",
        "init.svc.gpu": "running",
        "init.svc.hal_gnss_service_2-0": "running",
        "init.svc.hdbd": "stopped",
        "init.svc.health-hal-2-0": "running",
        "init.svc.healthd": "running",
        "init.svc.hiaiserver": "running",
        "init.svc.hiapplogcat": "stopped",
        "init.svc.hidl_memory": "running",
        "init.svc.hignss": "running",
        "init.svc.hilog": "stopped",
        "init.svc.hinetmanager": "running",
        "init.svc.hisecd": "running",
        "init.svc.hisi_bfg": "stopped",
        "init.svc.hiview": "running",
        "init.svc.hivrar-hal-2-1": "running",
        "init.svc.hivrarserver": "running",
        "init.svc.hwcinterface-1-0": "running",
        "init.svc.hwemerffu": "stopped",
        "init.svc.hwfactoryinterface-hal-1-1": "running",
        "init.svc.hwfs-hal-1-0": "running",
        "init.svc.hwhiview-hal-1-1": "running",
        "init.svc.hwinit_check": "stopped",
        "init.svc.hwnffearly": "stopped",
        "init.svc.hwpged": "running",
        "init.svc.hwrme": "running",
        "init.svc.hwsched-1-0": "running",
        "init.svc.hwsecurity-hal": "running",
        "init.svc.hwservicemanager": "running",
        "init.svc.iGraphicsservice": "running",
        "init.svc.idmap2d": "running",
        "init.svc.incidentd": "running",
        "init.svc.inputlogcat": "stopped",
        "init.svc.installd": "running",
        "init.svc.iorapd": "stopped",
        "init.svc.isplogcat": "stopped",
        "init.svc.jpegdec-1-0": "running",
        "init.svc.keystore": "running",
        "init.svc.kmsglogcat": "stopped",
        "init.svc.libteec-3-0": "running",
        "init.svc.light-ext-hal-2-0": "running",
        "init.svc.lmkd": "running",
        "init.svc.logd": "running",
        "init.svc.logd-auditctl": "stopped",
        "init.svc.logd-reinit": "stopped",
        "init.svc.macaddr": "stopped",
        "init.svc.media": "running",
        "init.svc.media.swcodec": "running",
        "init.svc.mediacomm@2.1-service": "running",
        "init.svc.mediadrm": "running",
        "init.svc.mediaextractor": "running",
        "init.svc.mediametrics": "running",
        "init.svc.modem_driver": "stopped",
        "init.svc.modemchr_service": "running",
        "init.svc.motion-hal-1-0": "running",
        "init.svc.mygote": "running",
        "init.svc.netd": "running",
        "init.svc.nfc_hal_ext_service": "running",
        "init.svc.nfc_hal_service": "stopped",
        "init.svc.oam_hisi": "running",
        "init.svc.octty": "running",
        "init.svc.odmf-data-chgrp": "stopped",
        "init.svc.oeminfo_nvm": "running",
        "init.svc.perfgenius-hal-2-0": "running",
        "init.svc.pmom": "running",
        "init.svc.power-hw-hal-1-0": "running",
        "init.svc.powerct": "running",
        "init.svc.powerlogd": "running",
        "init.svc.restart_xlogcat_service": "stopped",
        "init.svc.rillogcat": "stopped",
        "init.svc.secure_element_hal_service": "running",
        "init.svc.sensors-hal-1-1_hw": "running",
        "init.svc.servicemanager": "running",
        "init.svc.shlogd": "stopped",
        "init.svc.sleeplogcat": "stopped",
        "init.svc.sop-hal-1-0": "stopped",
        "init.svc.statsd": "running",
        "init.svc.storage_info": "restarting",
        "init.svc.storaged": "running",
        "init.svc.surfaceflinger": "running",
        "init.svc.system_suspend": "running",
        "init.svc.teeauth": "running",
        "init.svc.teecd": "running",
        "init.svc.teelogcat": "stopped",
        "init.svc.thermal-daemon": "running",
        "init.svc.tombstoned": "running",
        "init.svc.tp-hal-1-0": "running",
        "init.svc.turbozoned": "stopped",
        "init.svc.ueventd": "running",
        "init.svc.uniperf-hal-1-0": "running",
        "init.svc.unrmd": "running",
        "init.svc.update_engine": "stopped",
        "init.svc.usb_port": "stopped",
        "init.svc.usbd": "stopped",
        "init.svc.vdecoderservice": "running",
        "init.svc.vibrator-HW-1-1": "running",
        "init.svc.vndservicemanager": "running",
        "init.svc.vold": "running",
        "init.svc.wifi_ext": "running",
        "init.svc.wificond": "running",
        "init.svc.wpa_supplicant": "stopped",
        "init.svc.xlogcat_service": "stopped",
        "init.svc.xlogctl_service": "stopped",
        "init.svc.zygote": "running",
        "init.svc.zygote_secondary": "running",
        "itouch.predict_opt": "0",
        "keyguard.no_require_sim": "true",
        "log.flowctrl.1": "27eccdc0F7acb586d020b770f20",
        "log.tag.APM_AudioPolicyManager": "D",
        "log.tag.stats_log": "I",
        "net.bt.name": "Android",
        "net.dns1": "221.3.131.11",
        "net.dns2": "2408:876c::8888",
        "net.hostname": "HUAWEI_Mate_20_Pro_(UD)-c",
        "net.ntp.time": "1597515895466",
        "net.ntp.timereference": "159154",
        "net.qtaguid_enabled": "1",
        "net.rmnet0.dns1": "221.3.131.11",
        "net.tcp.default_init_rwnd": "60",
        "net.wifi.selfcuring": "0",
        "nfc.initialized": "true",
        "nfc.node": "/dev/pn544",
        "partition.cust.verified": "2",
        "partition.hw_product.verified": "2",
        "partition.modem_driver.verified": "2",
        "partition.odm.verified": "2",
        "partition.preas.verified": "2",
        "partition.preavs.verified": "2",
        "partition.preload.verified": "2",
        "partition.prets.verified": "2",
        "partition.pretvs.verified": "2",
        "partition.system.verified": "2",
        "partition.vendor.verified": "2",
        "partition.version.verified": "2",
        "persist.bt.max.a2dp.connections": "2",
        "persist.config.lower_buffer_num_enable": "true",
        "persist.config.pcm_data_size": "50",
        "persist.deep.theme_0": "",
        "persist.jank.gameskip": "true",
        "persist.kirin.touch_move_opt": "1",
        "persist.kirin.touch_vsync_opt": "1",
        "persist.kirin.touchevent_opt": "1",
        "persist.log.tag": "I",
        "persist.media.lowlatency.enable": "true",
        "persist.radio.apm_sim_not_pwdn": "1",
        "persist.radio.commril_mode": "HISI_CGUL_MODE",
        "persist.radio.cur_dend_cause": "2816",
        "persist.radio.defdualltecap": "1",
        "persist.radio.defdualsimltemenu": "true",
        "persist.radio.disconnectCode": "16",
        "persist.radio.dualltecap": "1",
        "persist.radio.findmyphone": "0",
        "persist.radio.incalldata": "true",
        "persist.radio.last_phone_type": "GSM,GSM",
        "persist.radio.lte_enabled": "true",
        "persist.radio.modem.cap": "09B9D72",
        "persist.radio.modem0_imsswitch": "1",
        "persist.radio.modem1_imsswitch": "1",
        "persist.radio.modem2_imsswitch": "2",
        "persist.radio.multisim.config": "dsds",
        "persist.radio.nitz_hw_name": "",
        "persist.radio.nitz_hw_name1": "",
        "persist.radio.nvcfg_file": "CUCC_CN.bin",
        "persist.radio.previousopcode0": "46007",
        "persist.radio.previousopcode1": "46001",
        "persist.radio.procsetdata": "com.android.systemui",
        "persist.radio.request_shutdown": "true",
        "persist.radio.usersetdata": "true",
        "persist.service.hdb.enable": "true",
        "persist.service.tm2.tofile": "false",
        "persist.sys.addview.config": "1",
        "persist.sys.adoptable": "force_on",
        "persist.sys.appstart.enable": "true",
        "persist.sys.appstart.sync": "false",
        "persist.sys.aps.defaultWidth": "1440",
        "persist.sys.aps.firstboot": "0",
        "persist.sys.audio_mode": "0",
        "persist.sys.aware.compile.prop.num": "3",
        "persist.sys.aware.compile.prop.time": "1598277254",
        "persist.sys.boost.byeachfling": "true",
        "persist.sys.boost.durationms": "1000",
        "persist.sys.boost.skipframe": "3",
        "persist.sys.cpuset.enable": "1",
        "persist.sys.cpuset.subswitch": "1912336",
        "persist.sys.dalvik.vm.lib.2": "libart.so",
        "persist.sys.default.res.xres": "1440",
        "persist.sys.device_mcc": "460",
        "persist.sys.device_provisioned": "1",
        "persist.sys.devsched.subswitch": "2815",
        "persist.sys.displayinset.top": "0",
        "persist.sys.dolby.state": "on",
        "persist.sys.dpi": "640",
        "persist.sys.dualcards": "true",
        "persist.sys.enable_iaware": "true",
        "persist.sys.fast_h_duration": "2000",
        "persist.sys.fast_h_max": "50",
        "persist.sys.fingerpressnavi": "0",
        "persist.sys.fingersense": "1",
        "persist.sys.getvolumelist.cache": "true",
        "persist.sys.gms.uid": "10025,",
        "persist.sys.gps.lpp": "0",
        "persist.sys.hardcoder.name": "resmon|16",
        "persist.sys.hiview.base_version": "LYA-LGRP1-CHN 10.1.0.163",
        "persist.sys.hiview.cota_version": "",
        "persist.sys.hiview.cust_version": "LYA-AL00-CUST 10.1.0.160(C00)",
        "persist.sys.hiview.ecota_version": "",
        "persist.sys.hiview.module_version": "SYS.MOD11.0.16.15(G0H2)",
        "persist.sys.hiview.onekeycaptur": "0",
        "persist.sys.hiview.preload_version": "LYA-AL00-PRELOAD 10.0.0.8(C00R1)",
        "persist.sys.huawei.debug.on": "0",
        "persist.sys.hw.forcedark_policy": "1",
        "persist.sys.hwGpsTimestamp": "1598177896000",
        "persist.sys.hwLastSystemTime": "1598177894756",
        "persist.sys.hw_screen_freq": "0",
        "persist.sys.hwairplanestate": "com.android.deskclock",
        "persist.sys.hwpms_error_log": "",
        "persist.sys.hwpms_error_reboot_count": "0",
        "persist.sys.iaware.appboost.click_duration": "1000",
        "persist.sys.iaware.appboost.click_times": "3",
        "persist.sys.iaware.appboost.slide_duration": "5000",
        "persist.sys.iaware.appboost.slide_times": "16",
        "persist.sys.iaware.appboost.switch": "true",
        "persist.sys.iaware.appscenerecog.switch": "true",
        "persist.sys.iaware.appsdk": "true",
        "persist.sys.iaware.blitparallel": "true",
        "persist.sys.iaware.cpuenable": "true",
        "persist.sys.iaware.intelliclean": "true",
        "persist.sys.iaware.jpg_sample_adapt": "1",
        "persist.sys.iaware.preloadoptenable": "1",
        "persist.sys.iaware.previoushigh": "-1",
        "persist.sys.iaware.profile": "true",
        "persist.sys.iaware.size.BitmapDeocodeCache": "2048",
        "persist.sys.iaware.switch.BitmapDeocodeCache": "true",
        "persist.sys.iaware.topa.train": "8",
        "persist.sys.iaware.topimcn": "com.tencent.mm",
        "persist.sys.iaware.touchdownpreloadenable": "0",
        "persist.sys.iaware.vsyncfirst": "true",
        "persist.sys.iaware_config_cust": "iaware_cust_LYA-AL00_CN_9_9.1.0.139C00.xml",
        "persist.sys.iaware_config_ver": "iaware_config_LYA-AL00_CN_9_9.1.0.139C00.xml",
        "persist.sys.iaware_google_conn": "1560064986,0",
        "persist.sys.install_no_quota": "1",
        "persist.sys.isolated_storage": "true",
        "persist.sys.jankenable": "true",
        "persist.sys.lastTrafficMeal": "0",
        "persist.sys.locale": "zh-Hans-CN",
        "persist.sys.logsystem.coredump": "off",
        "persist.sys.logsystem.modem": "0",
        "persist.sys.logsystem.protohint": "0",
        "persist.sys.max_rdh_delay": "0",
        "persist.sys.mcc_match_fyrom": "46007,46001",
        "persist.sys.module_version_display": "SYS.MOD11.0.16.15(G0H2)",
        "persist.sys.module_version_real": "11001615000264",
        "persist.sys.navigationbar.mode": "0",
        "persist.sys.nvcfg_file0": "CMCC_CN",
        "persist.sys.nvcfg_file1": "CUCC_CN",
        "persist.sys.nvcfg_file_version0": "",
        "persist.sys.nvcfg_file_version1": "",
        "persist.sys.opkey0": "46007",
        "persist.sys.opkey1": "46001",
        "persist.sys.opname0": "CMCC_CN",
        "persist.sys.opname1": "CUCC_CN",
        "persist.sys.performance": "true",
        "persist.sys.powerup_reason": "NORMAL",
        "persist.sys.pre_data_sub_autoreg": "1",
        "persist.sys.pre_data_sub_ueinfo": "1",
        "persist.sys.pre_volte_sub0_state": "1",
        "persist.sys.pre_volte_sub0_state_autoreg": "1",
        "persist.sys.pre_volte_sub1_state": "1",
        "persist.sys.pre_volte_sub1_state_autoreg": "1",
        "persist.sys.predns": "false",
        "persist.sys.realdpi": "480",
        "persist.sys.rog.configmode": "1",
        "persist.sys.rog.height": "2340",
        "persist.sys.rog.width": "1080",
        "persist.sys.root.status": "0",
        "persist.sys.screen_soft_rank": "false",
        "persist.sys.sdencryption.enable": "true",
        "persist.sys.show_incallscreen": "0",
        "persist.sys.shut_alarm": "7 1598485500000",
        "persist.sys.smart_switch_enable": "true",
        "persist.sys.smart_switch_state": "0",
        "persist.sys.srms.enable": "true",
        "persist.sys.strictmode.disable": "true",
        "persist.sys.support_config_ash": "false",
        "persist.sys.timezone": "Asia/Shanghai",
        "persist.sys.uninstallapk": "1",
        "persist.sys.usb.capture": "false",
        "persist.sys.usb.config": "hisuite,mtp,mass_storage,hdb",
        "persist.sys.version": "101068",
        "persist.sys.version_update0": "false",
        "persist.sys.version_update1": "false",
        "persist.sys.volume.ringIndex": "0",
        "persist.sys.webview.vmsize": "133386016",
        "persist.sys.zen_mode": "0",
        "pm.dexopt.ab-ota": "speed-profile",
        "pm.dexopt.bg-dexopt": "speed-profile",
        "pm.dexopt.boot": "verify",
        "pm.dexopt.first-boot": "quicken",
        "pm.dexopt.inactive": "verify",
        "pm.dexopt.install": "speed-profile",
        "pm.dexopt.shared": "speed",
        "reduce.sar.imsi.mnc": "460",
        "ril.force_to_set_ecc": "invalid",
        "ril.hw_ecclist": "0+112,0+911",
        "ril.hw_ecclist1": "0+112,0+911",
        "ril.operator.numeric": "46000",
        "ro.actionable_compatible_property.enabled": "true",
        "ro.adb.btstatus": "valid",
        "ro.adb.secure": "1",
        "ro.alipay.channel.path": "/preload/LYA-AL00/all/cn/xml/huawei_alipay_antibrush",
        "ro.allow.mock.location": "0",
        "ro.apex.updatable": "true",
        "ro.audio.offload_wakelock": "false",
        "ro.baseband": "unknown",
        "ro.blight.exempt_app_type": "-1,1,16,24",
        "ro.board.boardid": "8423",
        "ro.board.boardname": "LAYA_TUGL_VR",
        "ro.board.chiptype": "kirin980_cs",
        "ro.board.modemid": "37014400",
        "ro.board.platform": "kirin980",
        "ro.booking.channel.path": "preload/LYA-AL00/all/cn/xml",
        "ro.boot.avb_version": "1.1",
        "ro.boot.boot_devices": "ff3c0000.ufs",
        "ro.boot.dtbo_idx": "274",
        "ro.boot.dynamic_partitions": "true",
        "ro.boot.flash.locked": "1",
        "ro.boot.hardware": "kirin980",
        "ro.boot.huawei_vbmeta.digest": "1ad5e7f235f49cd627f683c587ee06886d1ff1abbb39260ce26b8040cdfc2021",
        "ro.boot.mode": "normal",
        "ro.boot.product.hardware.sku": "LYA-AL00",
        "ro.boot.radio.multisim.config": "dsds",
        "ro.boot.selinux": "enforcing",
        "ro.boot.vbmeta.avb_version": "1.1",
        "ro.boot.vbmeta.device_state": "locked",
        "ro.boot.vbmeta.digest": "0dea1dfa1f28f649d2eb4e3898bb3b933679ef3260ced4bfc164bc206c8ed3cb",
        "ro.boot.vbmeta.hash_alg": "sha256",
        "ro.boot.vbmeta.invalidate_on_error": "yes",
        "ro.boot.vbmeta.size": "33152",
        "ro.boot.vercnt1": "1",
        "ro.boot.verifiedbootstate": "green",
        "ro.boot.veritymode": "enforcing",
        "ro.bootimage.build.date": "Wed Jul 22 21:19:04 CST 2020",
        "ro.bootimage.build.date.utc": "1595423944",
        "ro.bootimage.build.fingerprint": "kirin980/kirin980/kirin980:10/QP1A.190711.020/root202007222119:user/test-keys",
        "ro.bootloader": "unknown",
        "ro.bootmode": "normal",
        "ro.build.characteristics": "default",
        "ro.build.date": "Tue Jul  7 17:46:36 CST 2020",
        "ro.build.date.utc": "1594115196",
        "ro.build.description": "LYA-AL00-user 10.1.0 HUAWEILYA-AL00 163-CHN-LGRP1 release-keys",
        "ro.build.dianping_sourcefile": "/preload/LYA-AL00/all/cn/xml/dpsource.source",
        "ro.build.display.id": "LYA-AL00 10.1.0.163(C00E160R1P8)",
        "ro.build.fingerprint": "HUAWEI/LYA-AL00/HWLYA:10/HUAWEILYA-AL00/10.1.0.163C00:user/release-keys",
        "ro.build.hardware_expose": "true",
        "ro.build.hide": "false",
        "ro.build.hide.matchers": "10.1.0",
        "ro.build.hide.replacements": "10.0.0",
        "ro.build.hide.settings": "8;1.8 GHz;2.0GB;11.00 GB;16.00 GB;1920 x 1080;10;4.14.116;10.0.0",
        "ro.build.host": "cn-central-1b-3df00c4f21594110733099-2265614059-gsm4l",
        "ro.build.hw_emui_api_level": "23",
        "ro.build.hw_emui_lite.enable": "false",
        "ro.build.id": "HUAWEILYA-AL00",
        "ro.build.product": "LYA",
        "ro.build.tags": "release-keys",
        "ro.build.type": "user",
        "ro.build.update_version": "V1_2",
        "ro.build.user": "test",
        "ro.build.version.all_codenames": "REL",
        "ro.build.version.ark": "4",
        "ro.build.version.base_os": "",
        "ro.build.version.codename": "REL",
        "ro.build.version.emui": "EmotionUI_10.1.0",
        "ro.build.version.incremental": "10.1.0.163C00",
        "ro.build.version.min_supported_target_sdk": "23",
        "ro.build.version.preview_sdk": "0",
        "ro.build.version.preview_sdk_fingerprint": "REL",
        "ro.build.version.release": "10",
        "ro.build.version.sdk": "29",
        "ro.build.version.security_patch": "2020-07-01",
        "ro.camera.sound.not_forced": "true",
        "ro.carrier": "unknown",
        "ro.cdma.home.operator.numeric": "46003",
        "ro.channel.cn.wps.moffice_eng": "oem00172",
        "ro.channelId.com.ctrip.appmarket": "9156",
        "ro.channelId.com.meituan": "/preload/LYA-AL00/all/cn/xml/mtconfig.ini",
        "ro.channelId.taobao": "/preload/LYA-AL00/all/cn/xml/sjtbconfig.ini",
        "ro.check.modem_network": "true",
        "ro.com.baidu.baidumap": "/preload/LYA-AL00/all/cn/lib64/",
        "ro.com.baidu.searchbox": "/preload/LYA-AL00/all/cn/lib64/",
        "ro.com.google.clientidbase": "android-huawei",
        "ro.com.google.gmsversion": "10_202005",
        "ro.com.sina.news": "/preload/LYA-AL00/all/cn/xml/newsConfig.properties",
        "ro.com.ss.android.ugc.aweme": "/preload/LYA-AL00/all/cn/xml/huawei_aweme_400_pre_install.config",
        "ro.comp.cust_version": "Cust-CHN 10.1.0.1(0001)",
        "ro.comp.hl.product_base_version": "LYA-LGRP1-CHN 10.1.0.163",
        "ro.comp.hl.product_cust_version": "LYA-AL00-CUST 10.1.0.160(C00)",
        "ro.comp.hl.product_preload_version": "LYA-AL00-PRELOAD 10.0.0.8(C00R1)",
        "ro.comp.preas_version": "Preas-CHN 10.1.0(0000)",
        "ro.comp.preas_version.full": "Preas-CHN 10.1.0(Q)",
        "ro.comp.preavs_version": "Preavs 10.1.0(0000)",
        "ro.comp.preavs_version.full": "Preavs 10.1.0(Q)",
        "ro.comp.prets_version": "Prets 10.1.0(0000)",
        "ro.comp.prets_version.full": "Prets 10.1.0(Q)",
        "ro.comp.pretvs_version": "Pretvs 10.1.0(0000)",
        "ro.comp.pretvs_version.full": "Pretvs 10.1.0(Q)",
        "ro.comp.product_version": "Product-LYA 10.1.0(0000)",
        "ro.comp.sys_support_vndk": "",
        "ro.comp.system_version": "System 10.1.0.68(1GM4)",
        "ro.comp.version_version": "Version-LYA-AL00-000001 10.1.0(00MI)",
        "ro.confg.hw_systemversion": "System 10.1.0.68(1GM4)",
        "ro.config.a2dp_lowLatency": "true",
        "ro.config.aiprotection": "true",
        "ro.config.alarm_alert": "Forest_Melody.ogg",
        "ro.config.amr_wb_show_hd": "true",
        "ro.config.ap_24_mimo_on": "false",
        "ro.config.aperture_zoom_custom": "1",
        "ro.config.app_big_icon_size": "216",
        "ro.config.argesture_enable": "1",
        "ro.config.arobject_enable": "1",
        "ro.config.attach_apn_enabled": "true",
        "ro.config.attach_ip_type": "IPV4V6PCSCF",
        "ro.config.auto_display_mode": "true",
        "ro.config.backcolor": "green",
        "ro.config.beta_sec_ctrl": "false",
        "ro.config.blight_power_curve": "50,1;100,0.73;300,0.73;350,0.83;380,1",
        "ro.config.bundle_optb_mnc": "306",
        "ro.config.carkitmodenotif": "true",
        "ro.config.cl_volte_autoswitch": "true",
        "ro.config.colorTemperature_3d": "true",
        "ro.config.colorTemperature_K3": "true",
        "ro.config.color_aod_type": "127",
        "ro.config.concurrent_capture": "true",
        "ro.config.data_preinstalled": "true",
        "ro.config.dataoff_timeout": "5",
        "ro.config.default_screensize": "1440,3120",
        "ro.config.del_default_link": "false",
        "ro.config.demo_allow_pwd": "false",
        "ro.config.detect_sd_disable": "false",
        "ro.config.devicecolor": "black",
        "ro.config.direct_fullscreen_intent": "true",
        "ro.config.disable_force_touch": "true",
        "ro.config.disable_operator_name": "true",
        "ro.config.disable_reset_by_mdm": "true",
        "ro.config.disable_triple": "true",
        "ro.config.distributed_app_fwk": "true",
        "ro.config.dns.two_threads": "true",
        "ro.config.dnscure_ipcfg": "10.8.2.1;10.8.2.2|8.8.8.8;208.67.222.222;180.76.76.76;223.5.5.5",
        "ro.config.dolby_dap": "true",
        "ro.config.dolby_ddp": "true",
        "ro.config.dolby_game_mode": "true",
        "ro.config.dolby_volume": "-40;-50",
        "ro.config.dsds_mode": "cdma_gsm",
        "ro.config.empty.package": "true",
        "ro.config.enable_iaware": "true",
        "ro.config.enable_partition_move_update": "1",
        "ro.config.enable_perfhub_fling": "true",
        "ro.config.enable_rcc": "true",
        "ro.config.enable_rms": "true",
        "ro.config.enable_thermal_bdata": "true",
        "ro.config.enable_typec_earphone": "true",
        "ro.config.enterprise_support": "true",
        "ro.config.evdo_dropto_1x": "true",
        "ro.config.face_recognition": "true",
        "ro.config.fast_switch_simslot": "true",
        "ro.config.finger_joint": "true",
        "ro.config.fp_navigation": "true",
        "ro.config.fp_unlock_delay": "0",
        "ro.config.full_network_support": "true",
        "ro.config.gallery_story_disable": "false",
        "ro.config.gameassist": "1",
        "ro.config.gameassist.full-finger": "1",
        "ro.config.gameassist.nodisturb": "1",
        "ro.config.gameassist.peripherals": "1",
        "ro.config.gameassist_booster": "1",
        "ro.config.gameassist_soundtovibrate": "0",
        "ro.config.gps_to_nlp": "true",
        "ro.config.hiaibase_push_mode": "0",
        "ro.config.hiaiversion": "100.210.010.010",
        "ro.config.hicall": "true",
        "ro.config.hisi_cdma_supported": "true",
        "ro.config.hisi_net_ai_change": "true",
        "ro.config.hisi_video_acc": "true",
        "ro.config.hpx_m6m8_support": "true",
        "ro.config.huawei_navi_extend": "true",
        "ro.config.huawei_smallwindow": "392,176,1440,2128",
        "ro.config.hw.security_volume": "10",
        "ro.config.hw_BatteryLevel_job_allowed": "92",
        "ro.config.hw_OptiDBConfig": "true",
        "ro.config.hw_ReduceSAR": "false",
        "ro.config.hw_allow_rs_mms": "true",
        "ro.config.hw_aqv_enabled": "false",
        "ro.config.hw_bluetooth_is_auto_scan": "false",
        "ro.config.hw_booster": "true",
        "ro.config.hw_camera_nfc_switch": "true",
        "ro.config.hw_ch_alg": "2",
        "ro.config.hw_charge_frz": "true",
        "ro.config.hw_codec_support": "0.180410",
        "ro.config.hw_cota": "false",
        "ro.config.hw_dsdspowerup": "true",
        "ro.config.hw_dts_settings": "true",
        "ro.config.hw_eapsim": "true",
        "ro.config.hw_earpiece_fade": "true",
        "ro.config.hw_easywakeup": "false",
        "ro.config.hw_eccNumUseRplmn": "true",
        "ro.config.hw_ecclist_nocard": "+120,+122",
        "ro.config.hw_ecclist_withcard": "+112",
        "ro.config.hw_em_solution_ver": "B068",
        "ro.config.hw_emcom": "true",
        "ro.config.hw_emcom_mpux": "true",
        "ro.config.hw_emui_cast_mode": "true",
        "ro.config.hw_emui_desktop_mode": "true",
        "ro.config.hw_emui_dp_pc_mode": "true",
        "ro.config.hw_emui_welink_cast": "true",
        "ro.config.hw_emui_wfd_pc_mode": "true",
        "ro.config.hw_fake_ecc_list": "110,120,122,999,119",
        "ro.config.hw_freeform_enable": "true",
        "ro.config.hw_front_camera_support_zoom": "false",
        "ro.config.hw_front_fp_navi": "false",
        "ro.config.hw_fyuse_enable": "true",
        "ro.config.hw_globalEcc": "false",
        "ro.config.hw_glovemode_enabled": "1",
        "ro.config.hw_hicar_mode": "true",
        "ro.config.hw_hicar_mode_wireless": "true",
        "ro.config.hw_hotswap_on": "true",
        "ro.config.hw_low_ram": "false",
        "ro.config.hw_lte_release": "true",
        "ro.config.hw_magne_bracket": "true",
        "ro.config.hw_media_flags": "2",
        "ro.config.hw_multiscreen": "true",
        "ro.config.hw_multiscreen_optimize": "true",
        "ro.config.hw_multiwindow_optimization": "true",
        "ro.config.hw_navigationbar": "true",
        "ro.config.hw_newsimple": "true",
        "ro.config.hw_nfc_def_route": "1",
        "ro.config.hw_nfc_msimce": "true",
        "ro.config.hw_nlp": "com.huawei.lbs",
        "ro.config.hw_notch_size": "686,100,377,60",
        "ro.config.hw_opta": "999",
        "ro.config.hw_optb": "156",
        "ro.config.hw_power_saving": "true",
        "ro.config.hw_power_voice_key": "true",
        "ro.config.hw_rcs_product": "true",
        "ro.config.hw_rcs_vendor": "true",
        "ro.config.hw_rcs_vs_is": "1",
        "ro.config.hw_sensorhub": "true",
        "ro.config.hw_sim2airplane": "true",
        "ro.config.hw_singlehand": "1",
        "ro.config.hw_snapshot_scale": "70",
        "ro.config.hw_srlte": "true",
        "ro.config.hw_support_clone_app": "true",
        "ro.config.hw_support_geofence": "true",
        "ro.config.hw_switchdata_4G": "true",
        "ro.config.hw_tint": "true",
        "ro.config.hw_ukey_on": "true",
        "ro.config.hw_ukey_version": "2",
        "ro.config.hw_updateCotaPara": "true",
        "ro.config.hw_useCtrlSocket": "true",
        "ro.config.hw_vcardBase64": "true",
        "ro.config.hw_voicemail_sim": "true",
        "ro.config.hw_volte_dyn": "true",
        "ro.config.hw_volte_icon_rule": "1",
        "ro.config.hw_volte_on": "true",
        "ro.config.hw_vtlte_on": "true",
        "ro.config.hw_wakeup_device": "true",
        "ro.config.hw_watermark": "false",
        "ro.config.hw_wfd_optimize": "true",
        "ro.config.hw_wifi_wps_disable": "false",
        "ro.config.hw_wifibridge": "true",
        "ro.config.hwsync_enabled": "true",
        "ro.config.hwtheme": "1",
        "ro.config.ipv4.mtu": "1400",
        "ro.config.isDmProduct": "true",
        "ro.config.keep_zoom_same": "false",
        "ro.config.linkplus.liveupdate": "true",
        "ro.config.lockscreen_sound_off": "true",
        "ro.config.marketing_name": "HUAWEI Mate 20 Pro (UD)",
        "ro.config.networkmode_hide_dyn": "true",
        "ro.config.new_hw_screen_aspect": "3120:2960:1440",
        "ro.config.nfc_hasese": "true",
        "ro.config.nfc_nxp_active": "i",
        "ro.config.notification_sound": "Bongo.ogg",
        "ro.config.ota_update_theme": "10",
        "ro.config.para_updateCapacityVersion": "1.0",
        "ro.config.peq_support": "true",
        "ro.config.permanent_error_heal": "true",
        "ro.config.pg_sleep_switcher": "light_pluse",
        "ro.config.pre_dns_query": "true",
        "ro.config.protect_screen_name": "LG,BOE",
        "ro.config.quicknote": "true",
        "ro.config.rapid_capture_default_value": "0",
        "ro.config.ringtone": "Huawei_Tune_Living.ogg",
        "ro.config.ringtone2": "Huawei_Tune_Clean.ogg",
        "ro.config.rise_cutoff_freq": "true",
        "ro.config.screenon_turnoff_led": "true",
        "ro.config.se_esetype": "3",
        "ro.config.sim_contacts_enabled": "true",
        "ro.config.small_cover_size": "_1048x1912",
        "ro.config.sn_main_page": "true",
        "ro.config.soft_single_navi": "false",
        "ro.config.step_count_show": "true",
        "ro.config.sup_lte_high_speed": "true",
        "ro.config.supercharge_show_two_percents": "true",
        "ro.config.support_aod": "1",
        "ro.config.support_bt_bitrate_auto_adapt": "false",
        "ro.config.support_ca": "true",
        "ro.config.support_ccmode": "true",
        "ro.config.support_doubletap_pay": "true",
        "ro.config.support_etcis": "true",
        "ro.config.support_face_mode": "4",
        "ro.config.support_hwpki": "true",
        "ro.config.support_inputmethod_fillet_adaptation": "true",
        "ro.config.support_iseapp": "true",
        "ro.config.support_iudf": "true",
        "ro.config.support_notification_way": "true",
        "ro.config.support_one_time_hota": "true",
        "ro.config.support_privacyspace": "true",
        "ro.config.support_sdcard_crypt": "true",
        "ro.config.support_wcdma_modem1": "true",
        "ro.config.supports_hitws": "true",
        "ro.config.switchPrimaryVolume": "true",
        "ro.config.third_key_provider": "kukong",
        "ro.config.toolorder": "0,2,1,3,4",
        "ro.config.updatelocation": "true",
        "ro.config.vendor.isDmProduct": "true",
        "ro.config.videocalldistributedassist": "true",
        "ro.config.voice_recognition": "1",
        "ro.config.vr.resolution": "true",
        "ro.config.widevine_level3": "true",
        "ro.config.wifi_fast_bss_enable": "true",
        "ro.connectivity.chiptype": "hisi",
        "ro.connectivity.sub_chiptype": "hi1103",
        "ro.control.sleeplog": "true",
        "ro.control_privapp_permissions": "enforce",
        "ro.crypto.state": "encrypted",
        "ro.crypto.type": "file",
        "ro.cust.cdrom": "/hw_product/region_comm/china/cdrom/autorun.iso",
        "ro.dalvik.vm.native.bridge": "0",
        "ro.debuggable": "0",
        "ro.dual.sim.phone": "true",
        "ro.ebuy.channel.path": "/preload/LYA-AL00/all/cn/xml/config_channel.txt",
        "ro.feature.display_screensaver_lite": "false",
        "ro.feature.gallery.hide_album_enable": "true",
        "ro.feature.gallery.slide_show_enable": "true",
        "ro.feature.hwcamera.dsl.panorama3d": "0",
        "ro.feature.launcher.long_click_enter_edit_mode": "true",
        "ro.feature.launcher.setting_cycle_keep": "true",
        "ro.feature.mobile_network_sharing_integration": "false",
        "ro.feature.mobile_network_sharing_lite": "false",
        "ro.feature.weather.add_no_update_item": "true",
        "ro.gpu_turbo": "GPU Turbo",
        "ro.hardware": "kirin980",
        "ro.hardware.audio.primary": "hisi",
        "ro.huawei.build.date": "Tue Jul  7 17:46:36 CST 2020",
        "ro.huawei.build.date.utc": "1594115196",
        "ro.huawei.build.display.id": "LYA-AL00 10.1.0.163(C00E160R1P8)",
        "ro.huawei.build.fingerprint": "HUAWEI/LYA-AL00/HWLYA:10/HUAWEILYA-AL00/10.1.0.163C00:user/release-keys",
        "ro.huawei.build.host": "cn-central-1b-3df00c4f21594110733099-2265614059-gsm4l",
        "ro.huawei.build.version.incremental": "10.1.0.163C00",
        "ro.huawei.build.version.security_patch": "2020-07-01",
        "ro.huawei.channel.path": "/preload/LYA-AL00/all/cn/xml/",
        "ro.huawei.cust.oma_drm": "false",
        "ro.huawei.remount.check": "0",
        "ro.huaweiMarket.jingdong.path": "preload/LYA-AL00/all/cn/xml",
        "ro.hw.base_all_groupversion": "G2.0",
        "ro.hw.country": "cn",
        "ro.hw.custPath": "/version/cust/all/cn",
        "ro.hw.cust_all_groupversion": "G2.0",
        "ro.hw.hota.is_hwinit_cust_exists": "false",
        "ro.hw.hota.is_hwinit_exists": "false",
        "ro.hw.hota.is_hwinit_preload_exists": "false",
        "ro.hw.ipv6opt": "true",
        "ro.hw.ipv6timeout": "1900",
        "ro.hw.mirrorlink.enable": "true",
        "ro.hw.oemName": "LYA-AL00",
        "ro.hw.preload_all_groupversion": "G2.0",
        "ro.hw.sub1_disable_switch_cs": "true",
        "ro.hw.vendor": "all",
        "ro.hw_sc.cversion": "C00",
        "ro.hwcamera.aimovie_enable": "1",
        "ro.hwcamera.frontzoom_enable": "0",
        "ro.hwcamera.hdr_menu_enable": "1",
        "ro.hwcamera.modesuggest_enable": "true",
        "ro.hwcamera.smartzoom_enable": "true",
        "ro.hwcamera.support_720p_21_9": "true",
        "ro.hwcamera.underwater_enable": "true",
        "ro.hwpp_ds_fail": "111,32,33,35",
        "ro.hwtracking.cn.wps.moffice_eng": "huawei_preload_default",
        "ro.hwtracking.com.baidu.BaiduMap": "huawei_preload_default",
        "ro.hwtracking.com.baidu.searchbox": "huawei_preload_default",
        "ro.hwtracking.com.booking": "huawei_preload_default",
        "ro.hwtracking.com.dianping.v1": "huawei_preload_default",
        "ro.hwtracking.com.eg.android.AlipayGphone": "huawei_preload_default",
        "ro.hwtracking.com.jingdong.app.mall": "huawei_preload_default",
        "ro.hwtracking.com.sankuai.meituan": "huawei_preload_default",
        "ro.hwtracking.com.sina.news": "huawei_preload_default",
        "ro.hwtracking.com.sina.weibo": "huawei_preload_default",
        "ro.hwtracking.com.ss.android.article.news": "huawei_preload_default",
        "ro.hwtracking.com.ss.android.ugc.aweme": "huawei_preload_default",
        "ro.hwtracking.com.suning.mobile.ebuy": "huawei_preload_default",
        "ro.hwtracking.com.taobao.taobao": "huawei_preload_default",
        "ro.hwtracking.com.ximalaya.ting.android": "huawei_preload_default",
        "ro.hwtracking.ctrip.android.view": "huawei_preload_default",
        "ro.hwui.use_vulkan": "",
        "ro.iconnect.trustpair": "true",
        "ro.iorapd.enable": "false",
        "ro.kirin.product.platform": "kirin980",
        "ro.logd.kernel": "false",
        "ro.logd.size.stats": "64K",
        "ro.logsystem.usertype": "1",
        "ro.magic.api.version": "0.1",
        "ro.maple.enable": "1",
        "ro.netflix.bsp_rev": "KIRIN980-16183-2",
        "ro.oba.version": "20200722215716_OBA_VERSION",
        "ro.odm.build.date.utc": "1595423944",
        "ro.odm.build.fingerprint": "Huawei/Atlanta/Atlanta_LYA-AL00:10/QP1A.190711.020/20200722211920:user/release-keys",
        "ro.odm.ca_product_version": "LYA-AL00",
        "ro.odm.radio.nvcfg_normalization": "true",
        "ro.oem.key1": "C00R1",
        "ro.oem_unlock_supported": "1",
        "ro.opa.eligible_device": "true",
        "ro.opengles.version": "196610",
        "ro.patch.baseline.version": "2.0",
        "ro.patchversion": "patch01",
        "ro.postinstall.fstab.prefix": "/system",
        "ro.powersavemode.backlight_ratio": "80",
        "ro.product.CustCVersion": "C00",
        "ro.product.board": "LYA",
        "ro.product.brand": "HUAWEI",
        "ro.product.cpu.abi": "arm64-v8a",
        "ro.product.cpu.abilist": "arm64-v8a,armeabi-v7a,armeabi",
        "ro.product.cpu.abilist32": "armeabi-v7a,armeabi",
        "ro.product.cpu.abilist64": "arm64-v8a",
        "ro.product.cuptsm": "HUAWEI|ESE|01|02",
        "ro.product.device": "HWLYA",
        "ro.product.fingerprintName": "HUAWEI-Z115",
        "ro.product.first_api_level": "28",
        "ro.product.hardwareversion": "HL1LAYAM",
        "ro.product.locale": "zh-Hans-CN",
        "ro.product.locale.language": "zh",
        "ro.product.locale.region": "CN",
        "ro.product.manufacturer": "HUAWEI",
        "ro.product.member.level": "10011",
        "ro.product.model": "LYA-AL00",
        "ro.product.name": "LYA-AL00",
        "ro.product.odm.brand": "Huawei",
        "ro.product.odm.device": "Atlanta",
        "ro.product.odm.name": "Atlanta",
        "ro.product.system.brand": "Huawei",
        "ro.product.system.device": "generic_a15",
        "ro.product.system.manufacturer": "unknown",
        "ro.product.system.model": "generic_a15",
        "ro.product.system.name": "generic_a15",
        "ro.product.vendor.brand": "kirin980",
        "ro.product.vendor.device": "kirin980",
        "ro.product.vendor.manufacturer": "HUAWEI",
        "ro.product.vendor.model": "kirin980",
        "ro.product.vendor.name": "kirin980",
        "ro.product.wallet.nfc": "01|01|HUAWEI|01|02|01",
        "ro.prop.hwkeychain_switch": "true",
        "ro.property_service.version": "2",
        "ro.quick_broadcast_cardstatus": "false",
        "ro.radio.vsim_modem_count": "4",
        "ro.radio.vsim_support": "true",
        "ro.readfastboot": "0",
        "ro.revision": "0",
        "ro.ril.ecclist": "112,911,#911,*911",
        "ro.runmode": "normal",
        "ro.secure": "1",
        "ro.setupwizard.mode": "DISABLED",
        "ro.setupwizard.rotation_locked": "true",
        "ro.sf.enable_backpressure_opt": "0",
        "ro.sf.lcd_density": "480",
        "ro.sf.real_lcd_density": "640",
        "ro.sys.pg_nfb_kill": "true",
        "ro.sys.ping_bf_dorecovery": "true",
        "ro.sys.powerup_reason": "NORMAL",
        "ro.syssvccallrecord.enable": "true",
        "ro.system.build.date": "Tue Jul  7 17:46:36 CST 2020",
        "ro.system.build.date.utc": "1594115196",
        "ro.system.build.fingerprint": "Huawei/generic_a15/generic_a15:10/QP1A.190711.020/root202007071746:user/dev-keys",
        "ro.system.build.id": "QP1A.190711.020",
        "ro.system.build.tags": "dev-keys",
        "ro.system.build.type": "user",
        "ro.system.build.version.incremental": "eng.root.20200707.174720",
        "ro.system.build.version.release": "10",
        "ro.system.build.version.sdk": "29",
        "ro.sysui.signal.layout": "signal_unit_uct_view",
        "ro.telephony.default_network": "9",
        "ro.treble.enabled": "true",
        "ro.vendor.build.date": "Wed Jul 22 21:19:04 CST 2020",
        "ro.vendor.build.date.utc": "1595423944",
        "ro.vendor.build.fingerprint": "kirin980/kirin980/kirin980:10/QP1A.190711.020/root202007222119:user/test-keys",
        "ro.vendor.hiaiapiversion": "1.0",
        "ro.vendor.hiaiversion": "100.210.010.010",
        "ro.vndk.version": "29",
        "ro.vr.mode": "true",
        "ro.vr.surport": "true",
        "ro.wifi.channels": "",
        "ro.ximalaya.ting.yz-huawei": "yz-huawei",
        "ro.zygote": "zygote64_32",
        "security.perf_harden": "1",
        "selinux.restorecon_recursive": "/data/misc_ce/0",
        "service.bootanim.exit": "1",
        "service.bootanim.stop": "1",
        "service.pgnss.download_time": "657639415",
        "service.sf.present_timestamp": "1",
        "setupwizard.theme": "glif_v3_light",
        "sys.2dsdr.pkgname": "*",
        "sys.2dsdr.startratio": "1",
        "sys.accelerator.smartcare.sample.open": "true",
        "sys.aps.game.pkgname": "com.miHoYo.bh3.huawei",
        "sys.aps.power_mode": "3",
        "sys.aps.powermodefps": "55",
        "sys.aps.sdr.always_switchable": "1",
        "sys.aps.support": "101286913",
        "sys.aps.version": "10.1.0.18",
        "sys.bms_limit_mode": "normal",
        "sys.boot_completed": "1",
        "sys.current_backlight": "1450",
        "sys.defaultapn.enabled": "true",
        "sys.eglinit_opt": "true",
        "sys.email.smartcare.sample.open": "true",
        "sys.fingerprint.deviceId": "0",
        "sys.game.smartcare.sample.open": "true",
        "sys.huawei.thermal.enable": "true",
        "sys.hw_boot_success": "1",
        "sys.hwiaware.started": "true",
        "sys.iaware.cpuset.screenoff.bg": "0-3",
        "sys.iaware.cpuset.screenoff.boost": "0-7",
        "sys.iaware.cpuset.screenoff.fg": "0-7",
        "sys.iaware.cpuset.screenoff.kbg": "0-3",
        "sys.iaware.cpuset.screenoff.sysbg": "0-3",
        "sys.iaware.cpuset.screenoff.taboost": "",
        "sys.iaware.cpuset.screenoff.topapp": "0-7",
        "sys.iaware.cpuset.screenon.bg": "2-3",
        "sys.iaware.cpuset.screenon.boost": "4-7",
        "sys.iaware.cpuset.screenon.fg": "0-7",
        "sys.iaware.cpuset.screenon.kbg": "2-3,5",
        "sys.iaware.cpuset.screenon.sysbg": "0-3",
        "sys.iaware.cpuset.screenon.taboost": "4-7",
        "sys.iaware.cpuset.screenon.topapp": "0-7",
        "sys.iaware.eas.on": "true",
        "sys.iaware.empty_app_percent": "50",
        "sys.iaware.filteredType": "255",
        "sys.iaware.switch_set_success": "true",
        "sys.iaware.type": "-1",
        "sys.isolated_storage_snapshot": "true",
        "sys.iswifihotspoton": "false",
        "sys.logbootcomplete": "1",
        "sys.pg.nat_status": "600000",
        "sys.pg.pre_rescue_boot_count": "1",
        "sys.rescue_boot_count": "1",
        "sys.resettype": "normal:COLDBOOT",
        "sys.retaildemo.enabled": "0",
        "sys.rog.density": "480",
        "sys.rog.height": "2340",
        "sys.rog.width": "1080",
        "sys.runtime_data.hiddenapi.enable": "true",
        "sys.settingsprovider_ready": "1",
        "sys.show_google_nlp": "false",
        "sys.super_power_save": "false",
        "sys.sysctl.extra_free_kbytes": "61440",
        "sys.sysctl.tcp_def_init_rwnd": "60",
        "sys.system_server.start_count": "1",
        "sys.system_server.start_elapsed": "9963",
        "sys.system_server.start_uptime": "9963",
        "sys.thermal.vr_fps": "0",
        "sys.thermal.vr_ratio_height": "0",
        "sys.thermal.vr_ratio_width": "0",
        "sys.thermal.vr_warning_level": "0",
        "sys.tpdoze.exclude": "",
        "sys.tpdoze.include": "ALL",
        "sys.trigger_bms_heating": "0",
        "sys.update.state": "true",
        "sys.usb.config": "hisuite,mtp,mass_storage",
        "sys.usb.configfs": "1",
        "sys.usb.controller": "ff100000.dwc3",
        "sys.usb.ffs.ready": "0",
        "sys.usb.ffs_hdb.ready": "0",
        "sys.usb.mtp.device_type": "3",
        "sys.usb.set_default": "false",
        "sys.usb.state": "hisuite,mtp,mass_storage",
        "sys.use_memfd": "false",
        "sys.user.0.ce_available": "true",
        "sys.video.smartcare.sample.open": "true",
        "sys.wechat.smartcare.sample.open": "true",
        "sys.wifitracing.started": "1",
        "system_init.hwextdeviceservice": "1",
        "uifirst_listview_optimization_enable": "1",
        "vold.crypto_unencrypt_updatedir": "/data/update",
        "vold.cryptsd.keystate": "lock",
        "vold.has_adoptable": "0",
        "vold.has_quota": "0",
        "vold.has_reserved": "1",
        "vold.post_fs_data_done": "1",
        "wifi.direct.interface": "p2p0",
        "wifi.interface": "wlan0"
    },
    "sensor": {
        "1": {
            "maxDelay": 200000,
            "maxRange": 78.4532,
            "minDelay": 2000,
            "name": "accelerometer-icm20690",
            "power": 0.23,
            "resolution": 0.000009576806,
            "stringType": "android.sensor.accelerometer",
            "type": 1,
            "vendor": "invensense",
            "version": 1
        },
        "2": {
            "maxDelay": 200000,
            "maxRange": 2000,
            "minDelay": 10000,
            "name": "akm-akm09918",
            "power": 6.8,
            "resolution": 0.0625,
            "stringType": "android.sensor.magnetic_field",
            "type": 2,
            "vendor": "akm",
            "version": 1001
        },
        "3": {
            "maxDelay": 20000,
            "maxRange": 360,
            "minDelay": 10000,
            "name": "orientation",
            "power": 13,
            "resolution": 0.1,
            "stringType": "android.sensor.orientation",
            "type": 3,
            "vendor": "huawei",
            "version": 1
        },
        "4": {
            "maxDelay": 200000,
            "maxRange": 34.906586,
            "minDelay": 2000,
            "name": "gyroscope-icm20690",
            "power": 6.1,
            "resolution": 0.000017453292,
            "stringType": "android.sensor.gyroscope",
            "type": 4,
            "vendor": "invensense",
            "version": 1
        },
        "5": {
            "maxDelay": 0,
            "maxRange": 10000,
            "minDelay": 0,
            "name": "als-apds9253",
            "power": 0.75,
            "resolution": 1,
            "stringType": "android.sensor.light",
            "type": 5,
            "vendor": "avago",
            "version": 1
        },
        "6": {
            "maxDelay": 1000000,
            "maxRange": 1100,
            "minDelay": 100000,
            "name": "airpress-bmp380",
            "power": 0.65,
            "resolution": 0.01,
            "stringType": "android.sensor.pressure",
            "type": 6,
            "vendor": "bosch",
            "version": 1
        },
        "8": {
            "maxDelay": 0,
            "maxRange": 5,
            "minDelay": 0,
            "name": "proximity",
            "power": 0.75,
            "resolution": 5,
            "stringType": "android.sensor.proximity",
            "type": 8,
            "vendor": "Taos",
            "version": 1
        },
        "9": {
            "maxDelay": 20000,
            "maxRange": 9.80665,
            "minDelay": 10000,
            "name": "gravity",
            "power": 0.2,
            "resolution": 0.15328126,
            "stringType": "android.sensor.gravity",
            "type": 9,
            "vendor": "huawei",
            "version": 1
        },
        "10": {
            "maxDelay": 20000,
            "maxRange": 78.4532,
            "minDelay": 10000,
            "name": "linear Acceleration",
            "power": 0.2,
            "resolution": 0.009576807,
            "stringType": "android.sensor.linear_acceleration",
            "type": 10,
            "vendor": "huawei",
            "version": 1
        },
        "11": {
            "maxDelay": 20000,
            "maxRange": 1,
            "minDelay": 10000,
            "name": "rotation Vector",
            "power": 6.1,
            "resolution": 5.9604645e-8,
            "stringType": "android.sensor.rotation_vector",
            "type": 11,
            "vendor": "huawei",
            "version": 1
        },
        "14": {
            "maxDelay": 200000,
            "maxRange": 2000,
            "minDelay": 16667,
            "name": "uncalibrated Magnetic Field",
            "power": 6.8,
            "resolution": 0.0625,
            "stringType": "android.sensor.magnetic_field_uncalibrated",
            "type": 14,
            "vendor": "Asahi Kasei Microdevices",
            "version": 1
        },
        "15": {
            "maxDelay": 20000,
            "maxRange": 1,
            "minDelay": 10000,
            "name": "game Rotation Vector",
            "power": 6.1,
            "resolution": 5.9604645e-8,
            "stringType": "android.sensor.game_rotation_vector",
            "type": 15,
            "vendor": "huawei",
            "version": 1
        },
        "16": {
            "maxDelay": 200000,
            "maxRange": 34.906586,
            "minDelay": 2000,
            "name": "uncalibrated Gyroscope",
            "power": 6.1,
            "resolution": 0.000017453292,
            "stringType": "android.sensor.gyroscope_uncalibrated",
            "type": 16,
            "vendor": "STMicroelectronics",
            "version": 1
        },
        "17": {
            "maxDelay": 0,
            "maxRange": 2147483650,
            "minDelay": -1,
            "name": "significant Motion",
            "power": 0.23,
            "resolution": 1,
            "stringType": "android.sensor.significant_motion",
            "type": 17,
            "vendor": "huawei",
            "version": 1
        },
        "18": {
            "maxDelay": 0,
            "maxRange": 2147483650,
            "minDelay": 0,
            "name": "step Detector",
            "power": 0.23,
            "resolution": 1,
            "stringType": "android.sensor.step_detector",
            "type": 18,
            "vendor": "huawei",
            "version": 1
        },
        "19": {
            "maxDelay": 0,
            "maxRange": 2147483650,
            "minDelay": 0,
            "name": "step counter",
            "power": 0.23,
            "resolution": 1,
            "stringType": "android.sensor.step_counter",
            "type": 19,
            "vendor": "huawei",
            "version": 1
        },
        "20": {
            "maxDelay": 200000,
            "maxRange": 1,
            "minDelay": 10000,
            "name": "geomagnetic Rotation Vector",
            "power": 6.1,
            "resolution": 5.9604645e-8,
            "stringType": "android.sensor.geomagnetic_rotation_vector",
            "type": 20,
            "vendor": "huawei",
            "version": 1
        },
        "35": {
            "maxDelay": 200000,
            "maxRange": 78.4532,
            "minDelay": 5000,
            "name": "uncalibrated Accelerometer",
            "power": 0.23,
            "resolution": 0.000009576806,
            "stringType": "android.sensor.accelerometer_uncalibrated",
            "type": 35,
            "vendor": "huawei",
            "version": 1
        },
        "65538": {
            "maxDelay": 0,
            "maxRange": 1,
            "minDelay": 0,
            "name": "HALL sensor",
            "power": 0.75,
            "resolution": 1,
            "stringType": "android.sensor.hall",
            "type": 65538,
            "vendor": "huawei",
            "version": 1
        },
        "65544": {
            "maxDelay": 500000,
            "maxRange": 1,
            "minDelay": 10000,
            "name": "phonecall sensor",
            "power": 0.23,
            "resolution": 1,
            "stringType": "android.sensor.gesture",
            "type": 65544,
            "vendor": "huawei",
            "version": 1
        },
        "65545": {
            "maxDelay": 500000,
            "maxRange": 1,
            "minDelay": 10000,
            "name": "mag bracket",
            "power": 0.23,
            "resolution": 1,
            "stringType": "android.sensor.magn_bracket",
            "type": 65545,
            "vendor": "huawei, virtual",
            "version": 1
        },
        "65552": {
            "maxDelay": 1000000,
            "maxRange": 65535,
            "minDelay": 500000,
            "name": "RPC sensor",
            "power": 5,
            "resolution": 1,
            "stringType": "android.sensor.rpc",
            "type": 65552,
            "vendor": "huawei",
            "version": 1
        },
        "65553": {
            "maxDelay": 200000,
            "maxRange": 65535,
            "minDelay": 50000,
            "name": "agt",
            "power": 0.1,
            "resolution": 0.001,
            "stringType": "android.sensor.agt",
            "type": 65553,
            "vendor": "huawei",
            "version": 1
        },
        "65554": {
            "maxDelay": 200000,
            "maxRange": 65535,
            "minDelay": 0,
            "name": "color sensor",
            "power": 0.1,
            "resolution": 0.001,
            "stringType": "android.sensor.color",
            "type": 65554,
            "vendor": "huawei",
            "version": 1
        },
        "65555": {
            "maxDelay": 200000,
            "maxRange": 650,
            "minDelay": 16000,
            "name": "tof sensor",
            "power": 0.75,
            "resolution": 1,
            "stringType": "android.sensor.tof",
            "type": 65555,
            "vendor": "huawei",
            "version": 1
        },
        "65556": {
            "maxDelay": 0,
            "maxRange": 65535,
            "minDelay": 0,
            "name": "drop sensor",
            "power": 0.25,
            "resolution": 1,
            "stringType": "android.sensor.drop",
            "type": 65556,
            "vendor": "huawei",
            "version": 1
        }
    }
}


    0x009. 这种方式将用真机跑开放http接口由python端发起请求处理数据等操作,由于开始代码不稳定,优化代码后速度还不错。文章内所有截图以及内容,均为技术分析使用,分析完毕后已全部经删除.

数据量



友情提示:本文只为技术分享交流,请勿非法用途.产生一切法律问题与本人无关



在浏览的同时希望给予作者打赏,来支持作者的服务器维护费用.一分也是爱~