google V8 process.cc示例 解析

本文解析了googleV8引擎示例代码process.cc的核心功能,包括初始化全局日志函数、编译运行JS脚本、处理HTTP请求流程及C++与JS对象间的转换等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

google V8引擎的示例代码process.cc,核心类是JsHttpRequestProcessor。

 

    Initialize()函数完成以下功能:

    - 设置全局javascript日志函数log的C++实现(155行)

    - InstallMaps中将C++  map<string, string>的options(602行)和output(616行)作为js全局变量options(236行)和output(239行)

    - 编译和运行js脚本(175行)

    - 获取js Process函数的句柄(192行)。

 

    Process()函数具体处理请求:

    - 将C++的request对象转化为js对象(254行)

    - 调用js的Process函数(263行)。

 

    其他函数功能如下:

    - Wrap函数将C++对象转化为js对象,UnWrap从js对象中获取C++对象。

    - MapGet和MapSet用于拦截器(Interceptors)方式设置js ObjectTemplate。

    - GetPath等用于访问器(Accessors)方式设置js ObejctTemplate。

    - MakeXXXTemplate创建js ObjectTemplate,注意只需创建一次可反复实例化。

 

    其他的都是测试Stub,不再记录。

 

转载自http://blog.youkuaiyun.com/zlei12/archive/2009/04/03/4041640.aspx

{"BOARD":"trinket","BOOTLOADER":"unknown","BRAND":"realme","CPU_ABI":"arm64-v8a","CPU_ABI2":"","supported_abis":"arm64-v8a,armeabi-v7a,armeabi","DEVICE":"RMX1911","DISPLAY":"RMX1911EX_11_C.79","FINGERPRINT":"realme\/RMX1911\/RMX1911:10\/QKQ1.200209.002\/1642670490:user\/release-keys","HARDWARE":"qcom","HOST":"CP-ubuntu-123","ID":"QKQ1.200209.002","MANUFACTURER":"realme","MODEL":"RMX1911","PRODUCT":"RMX1911","TAGS":"release-keys","TIME":"1655289720000","TYPE":"user","BaseBand":"unknown","INCREMENTAL":"1642670490","RELEASE":"10","SDK_INT":"29","AndroidID":"a961fc120aa74bc4","DESCRIPTION":"RMX1911-user 10 QKQ1.200209.002 unknown release-keys","density":"1.5","densityDpi":"240","scaledDensity":"1.5","xdpi":"240","ydpi":"239.25","widthPixels":"720","heightPixels":"1600","widthPixels1":"720","heightPixels1":"1600","gid":"ce96f9c7-a3bc-42f8-8308-5c9e318053d3","idfv":"0487a94a-bcea-4990-bef7-006b3f829295","dx":"720","dy":"1600","BATTERY_SCALE":"100","BATTERY_LEVEL":"71","BATTERY_STATUS":"2","BATTERY_SOWPIE":"-1","audio_stream":{"ringer_mode":"0","mode":"0","cur_stream":{"STREAM_VOICE_CALL":7,"STREAM_SYSTEM":"0","STREAM_RING":"0","STREAM_MUSIC":34,"STREAM_ALARM":11,"STREAM_NOTIFICATION":"0"},"max_stream":{"STREAM_VOICE_CALL":11,"STREAM_SYSTEM":15,"STREAM_RING":15,"STREAM_MUSIC":100,"STREAM_ALARM":15,"STREAM_NOTIFICATION":15},"min_stream":{"STREAM_VOICE_CALL":1,"STREAM_SYSTEM":0,"STREAM_RING":0,"STREAM_MUSIC":0,"STREAM_ALARM":1,"STREAM_NOTIFICATION":0}},"STREAM_MUSIC":34,"screen_brightness":"143","useragent":"Mozilla\/5.0 (Linux; Android 10; RMX1911 Build\/QKQ1.200209.002; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/111.0.5563.58 Mobile Safari\/537.36","freespace":"22493016022","totalspace":"23506939904","tm":"2834935808","fm":"700229144","lmt":"226492393","lm":"false","datanetworktype":"1","network":"3g","so":"1,2,18,24","orientation_lock":"portrait","vs":"false","lpm":"true","mute_switch":"1","kb":"ar_EG","gettype":"0","getsubtype":"10","simcountryiso":"eg","carrier":"etisalat","simOperator":"60203","ps_version_code":"84491900","ps_version":"44.9.19-23 [0] [PR] 725679144","network_restricted":"3","installer_name":"com.android.vending","firstinstalltime":"1754983701450"} 有这样一个参数需要替换以下参数的一些值{ "androidId": "a0ba2bb82b59fdbe", "package_name": "com.abcd.appinfo", "playAdId": "3f432ab9-05e2-4cc2-96c7-ca9572fc245a", "appSetId": "9995ae8e-37d1-b7f1-2a47-66ace2d3d84b", "oaid": "", "drmid_hex": "6cd76657a1ec4be18ac431ec48601c9532da2f0ed7a36b7d45f3bbd86fd093ec", "drmid_base64": "bNdmV6HsS+GKxDHsSGAclTLaLw7Xo2t9RfO72G\/Qk+w=", "brand": "Infinix", "model": "Infinix X6515", "osVer": 31, "version": "12", "sdkVersion": 31, "deviceUuid": "8a818b49-db07-4fd2-9968-2cce61f867da", "sensor_size": 33, "sensor_list": "[{\"ax_type\":1,\"ax_name\":\"BMI160 Accelerometer\",\"ax_vendor\":\"BOSCH\"},{\"ax_type\":2,\"ax_name\":\"LIS2MDL Magnetometer\",\"ax_vendor\":\"STMicro\"},{\"ax_type\":4,\"ax_name\":\"BMI160 Gyroscope\",\"ax_vendor\":\"BOSCH\"},{\"ax_type\":5,\"ax_name\":\"TMD2725 Ambient Light\",\"ax_vendor\":\"AMS\"},{\"ax_type\":6,\"ax_name\":\"BMP380 Barometer\",\"ax_vendor\":\"Bosch\"},{\"ax_type\":8,\"ax_name\":\"TMD2725 Proximity (wake-up)\",\"ax_vendor\":\"AMS\"},{\"ax_type\":14,\"ax_name\":\"LIS2MDL Magnetometer Uncalibrated\",\"ax_vendor\":\"STMicro\"},{\"ax_type\":16,\"ax_name\":\"BMI160 Gyroscope Uncalibrated\",\"ax_vendor\":\"BOSCH\"},{\"ax_type\":35,\"ax_name\":\"BMI160 Accelerometer Uncalibrated\",\"ax_vendor\":\"BOSCH\"},{\"ax_type\":33172001,\"ax_name\":\"MAX11261\",\"ax_vendor\":\"Maxim\"},{\"ax_type\":33172002,\"ax_name\":\"BMI160 Temperature\",\"ax_vendor\":\"BOSCH\"},{\"ax_type\":33172003,\"ax_name\":\"BMP380 Temperature\",\"ax_vendor\":\"Bosch\"},{\"ax_type\":33172004,\"ax_name\":\"LIS2MDL Temperature\",\"ax_vendor\":\"STMicro\"},{\"ax_type\":33172005,\"ax_name\":\"camera v-sync 0\",\"ax_vendor\":\"Google\"},{\"ax_type\":33172005,\"ax_name\":\"camera v-sync 1\",\"ax_vendor\":\"Google\"},{\"ax_type\":33172005,\"ax_name\":\"camera v-sync 2\",\"ax_vendor\":\"Google\"},{\"ax_type\":65541,\"ax_name\":\"Binned Brightness\",\"ax_vendor\":\"Google\"},{\"ax_type\":25,\"ax_name\":\"Device Pickup Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":65543,\"ax_name\":\"Proximity Gated Double Tap Gesture\",\"ax_vendor\":\"Google\"},{\"ax_type\":65537,\"ax_name\":\"Double Twist\",\"ax_vendor\":\"Google\"},{\"ax_type\":15,\"ax_name\":\"Game Rotation Vector Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":20,\"ax_name\":\"Geomagnetic Rotation Vector Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":9,\"ax_name\":\"Gravity Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":10,\"ax_name\":\"Linear Acceleration Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":3,\"ax_name\":\"Orientation Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":11,\"ax_name\":\"Rotation Vector Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":17,\"ax_name\":\"Significant Motion\",\"ax_vendor\":\"Google\"},{\"ax_type\":19,\"ax_name\":\"Step Counter\",\"ax_vendor\":\"Google\"},{\"ax_type\":18,\"ax_name\":\"Step Detector\",\"ax_vendor\":\"Google\"},{\"ax_type\":22,\"ax_name\":\"Tilt Sensor\",\"ax_vendor\":\"Google\"},{\"ax_type\":27,\"ax_name\":\"Device Orientation\",\"ax_vendor\":\"Google\"},{\"ax_type\":65548,\"ax_name\":\"Device Orientation Debug\",\"ax_vendor\":\"Google\"},{\"ax_type\":65553,\"ax_name\":\"Rotation preindication\",\"ax_vendor\":\"Google\"}]", "sensor_hash": "BMI160 Accelerometer##LIS2MDL Magnetometer##BMI160 Gyroscope##TMD2725 Ambient Light##BMP380 Barometer##TMD2725 Proximity (wake-up)##LIS2MDL Magnetometer Uncalibrated##BMI160 Gyroscope Uncalibrated##BMI160 Accelerometer Uncalibrated##MAX11261##BMI160 Temperature##BMP380 Temperature##LIS2MDL Temperature##camera v-sync 0##camera v-sync 1##camera v-sync 2##Binned Brightness##Device Pickup Sensor##Proximity Gated Double Tap Gesture##Double Twist##Game Rotation Vector Sensor##Geomagnetic Rotation Vector Sensor##Gravity Sensor##Linear Acceleration Sensor##Orientation Sensor##Rotation Vector Sensor##Significant Motion##Step Counter##Step Detector##Tilt Sensor##Device Orientation##Device Orientation Debug##Rotation preindication##", "device": { "build_version": { "release": "10", "osApi": 29, "codeName": "REL", "sdk": 29, "incremental": "8618562", "base_os": "" }, "other": { "processId": "12380", "cpuNum": "8", "cpuInfoStr": "{\"core\":8,\"hw\":\"\",\"max\":\"1766400\",\"min\":\"1132800\",\"ft\":\"fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp\"}", "romStr": "55379472384", "diskBlockCount": 13520379, "diskAvailableBlocks": 11045666, "region": "GB", "getDiskBlockSize": 4096, "soRomRam": "{\"sd_blocks\":13520379,\"sd_avail\":11045666,\"sd_size\":4096,\"rom_block\":13520379,\"rom_avail\":11045666,\"rom_size\":4096,\"total_ram\":3753299968,\"free_ram\":1788870656,\"mem_unit\":\"1\",\"ee\":\"\"}", "averagePower": "4001", "batteryCapacity": 2082, "batteryStatus": 5, "batteryVoltageNow": 4307, "batteryTemp": 275, "plugged": 2, "level": 100, "scale": 100, "technology": "Li-ion", "health": 2, "store_api_ver": 84701430, "store_api_name": "47.0.14-31 [0] [PR] 778650234", "androidId": "a0ba2bb82b59fdbe", "cpuFileStr": "Processor\t: AArch64 Processor rev 13 (aarch64)\nprocessor\t: 0\nBogoMIPS\t: 38.00\nFeatures\t: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp\nCPU implementer\t: 0x51\nCPU architecture: 8\nCPU variant\t: 0x7\nCPU part\t: 0x803\nCPU revision\t: 12\n\n... (truncated)" }, "system": { "systemOsVersion": "4.9.270-g862f51bac900-ab7613625", "networkTransport": "Wifi", "audioVolume": 8, "audioMode": 2, "roProductModel": "Pixel 3", "osArch": "aarch64", "pmListLibraries": "library:android.ext.adservices\nlibrary:android.ext.shared\nlibrary:android.hidl.base-V1.0-java\nlibrary:android.hidl.manager-V1.0-java\nlibrary:android.net.ipsec.ike\nlibrary:android.test.base\nlibrary:android.test.mock\nlibrary:android.test.runner\nlibrary:com.android.cts.ctsshim.shared_library\nlibrary:com.android.future.usb.accessory\n... (truncated)", "armVariant": "arm64-v8a", "roProductBrand": "google", "nativeBridge": "Unknown", "gsmOperatorNumeric": "46000", "zygote": "zygote64_32", "gsmSimOperatorNumeric": "23433", "roProductManufacturer": "Google", "roDebuggable": "0", "uname": "Linux localhost 4.9.270-g862f51bac900-ab7613625 #0 SMP PREEMPT Thu Aug 5 07:04:42 UTC 2021 aarch64", "buildUser": "android-build", "mockLocation": "0", "roBuildDisplayId": "SP1A.210812.016.C2", "roProductBoard": "blueline", "roProductDevice": "blueline", "roProductCpuAbilist": "arm64-v8a,armeabi-v7a,armeabi", "sysUsbState": "mtp", "roBuildDateUtc": "1653001377", "roBuildVersionRelease": "12", "armFeatures": "default", "roProductName": "blueline", "gsmOperatorAlpha": "CHINA MOBILE", "roBuildDescription": "blueline-user 12 SP1A.210812.016.C2 8618562 release-keys", "roBuildTags": "release-keys", "vendingVersionCode": "84701430", "roProductCpuAbilist32": "armeabi-v7a,armeabi", "roBoardPlatform": "sdm845", "roBuildVersionSdk": "31", "roOsVersion": "4.9.270-g862f51bac900-ab7613625", "roSecure": "1", "gsmSimOperatorAlpha": "EE", "gsmVersionBaseband": "g845-00194-210812-B-7635520", "roBuildFingerprint": "google\/blueline\/blueline:12\/SP1A.210812.016.C2\/8618562:user\/release-keys", "pmListFeatures": "feature:reqGlEsVersion=0x30002\nfeature:android.hardware.audio.low_latency\nfeature:android.hardware.audio.output\nfeature:android.hardware.audio.pro\nfeature:android.hardware.bluetooth\nfeature:android.hardware.bluetooth_le\nfeature:android.hardware.camera\nfeature:android.hardware.camera.any\nfeature:android.hardware.camera.autofocus\nfeature:android.hardware.camera.capability.manual_post_processing\n... (truncated)", "vendingVersionName": "47.0.14-31 [0] [PR] 778650234", "initSvcAdbd": "running", "roProductCpuAbilist64": "arm64-v8a", "roBuildVersionCodename": "REL", "lastBootTime": "202454340", "af_ac_roDalvikVmNativeBridge": "0", "af_ah_roZygote": "zygote64_32", "af_ai_roAllowMockLocation": "0", "af_ak_dalvikVmIsaArmFeatures": "arm64-v8a,armeabi-v7a,armeabi", "af_al_dalvikVmIsaArmVariant": "arm64-v8a", "af_am_dalvikVmIsaArm64Features": "arm64-v8a", "af_an_dalvikVmIsaArm64Variant": "kryo300", "af_ap_roBuildUser": "android-build", "af_ar_roHardware": "blueline", "af_as_roProductCpuAbi": "arm64-v8a", "af_at_roProductCpuAbilist": "arm64-v8a, armeabi-v7a, armeabi", "af_au_roProductCpuAbilist32": "armeabi-v7a, armeabi", "af_av_roProductCpuAbilist64": "arm64-v8a" }, "ui": { "densityDpi": 440, "rotationStr": "p", "screenLayout": 268435810, "scaledDensity": 2.75, "rotationInt": 0, "density": 2.75, "size": 5.460000038146973, "heightPixels": 1612, "ydpi": 442.45098876953125, "xdpi": 442.45098876953125, "widthPixels": 720 }, "build": { "radioVersion": "g845-00194-210812-B-7635520", "product": "X6515-OP", "display": "SP1A.210812.016.C2", "type": "user", "tags": "release-keys", "manufacture": "INFINIX", "cpu_abi": "arm64-v8a", "b_cpu_abi": "arm64-v8a", "serial": "unknown", "host": "abfarm-release-rbe-64-00023", "model": "Infinix X6515", "id": "SP1A.210812.016.C2", "time": 1653001377000, "cpu_abi2": "", "b_cpu_abi2": "", "brand": "Infinix", "device": "Infinix-X6515", "fingerPrint": "INFINIX\/X6515-OP\/Infinix-X6515:12\/SP1A.210812.016\/231116V1305:user\/release-keys", "bootLoader": "b1c1-0.4-7617406", "board": "X6515-OP", "hardware": "blueline", "user": "android-build" }, "telephony": { "networkCountryIso": "cn", "phoneType": 1, "simCountryIso": "gb", "networkOperator": "46000", "networkOperatorName": "CHINA MOBILE", "netWorkType": -1, "deviceSoftwareVersion": "Unknown", "simState": 5, "simOperator": "23433", "simOperatorName": "EE", "mnc": 0, "mcc": 460, "activeNetworkMetered": false }, "timezone": { "displayName": "Greenwich Mean Time", "displayNameLong": "British Summer Time", "timezoneMinus": "Europe\/GMT+0:00", "timezoneRawOff": 0, "deviceCity": "United Kingdom", "countryCity": "Europe\/London" }, "ua": { "ua": "Mozilla\/5.0 (Linux; Android 12; Infinix X6515 Build\/SP1A.210812.016; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/122.0.6261.106 Mobile Safari\/537.36", "sysUa": "Dalvik\/2.1.0 (Linux; U; Android 12; Pixel 3 Build\/SP1A.210812.016.C2)", "localIp": "192.168.9.103", "lang": "en" }, "locale": { "country": "GB", "displayLang": "English", "lang": "en" }, "device": { "deviceType": "Phone", "playAdId": "3f432ab9-05e2-4cc2-96c7-ca9572fc245a", "country": "GB", "buildName": "SP1A.210812.016.C2", "abi": "arm64-v8a", "language": "en", "osName": "Unknown", "deviceName": "Pixel 3", "screenSize": "normal", "osVersion": "12", "hardwareName": "blueline", "displayWidth": 1080, "displayHeight": 2028, "displayRotation": 0, "screenFormat": "portrait", "screenDensity": "ldpi", "screenBrightness": 41, "playAdIdAttempt": "2", "deviceManufacturer": "Google", "apiLevel": 31 }, "mac": { "wifiName": "<unknown ssid>", "localIp": "192.168.9.103", "wifiMac": "02:00:00:00:00:00" }, "space": { "UsedDiskSpace (Not Formatted)": "17.47 GB", "FreeMemory (Formatted)": "47.55%", "FreeDiskSpace (Not Formatted)": "42.14 GB", "LongFreeDiskSpace": "45242564608", "TotalMemory": "3.5 GB", "DiskSpace": "59.6 GB", "UsedMemory (Formatted)": "52.45%", "FreeMemory (Not Formatted)": "1.66 GB", "LongDiskSpace": "64000000000", "UsedDiskSpace (Formatted)": "29.31%", "UsedMemory (Not Formatted)": "1.83 GB", "FreeDiskSpace (Formatted)": "70.69%" } } },替换以下支出的参数值brand,model,density,heightPixels,widthPixels,manufacture,product,device,fingerPrint,ua的值换成useragent的值并且Android *改成Android 10,board值也是换成product的值,传入的是txt格式,输出给我正确的json格式数据
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值