Multi-Language Programming : Accessing Interface Objects Defined In Other Language_4

本文介绍了两种跨语言访问对象的方法:一是通过环境提供的功能查找并访问其他语言定义的接口对象;二是面向对象环境下创建其他语言实体类实例,支持双向语言访问及回调功能。

     Common object environment provides run-time support. Based on support of the environment, applications can access interface objects defined in other language. There are two methods, we introduce them one by one in detail
    First method, application can find interface object defined in other language using the function of environment. And then, it can access object’s attributes or call object’s functions. Interface objects may be identified by its UUID or name. Object’s name should be used carefully because there may have multiple objects with the same name.

    Second method, for environment supporting object-oriented programming, application can create an instance of entity class object of other language as talking about previously. The instance can be accessed by the two languages simultaneously. This method is more flexible. Application can create overloading functions of class object to support callback. For examples, if an object with function “Add” is defined in python language, application in java can create an instance of it and overloading the function “Add”. Then, python can callback to java through the “Add” function.

    In above figure, python class object defines two functions “Add” and “Dec”. The “Add” function is overridden by java instance. The instance is managed by environment, and is visible to java and python. Python can call “Add” function of java instance to perform callback function. For “Dec” function, because instance does not override this function, the call will be redirected to class object of python.

"02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 2 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_2 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_2 /data/vendor/time/ats_2 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_2 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 3 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_3 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_3 /data/vendor/time/ats_3 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_3 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 4 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_4 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_4 /data/vendor/time/ats_4 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_4 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 5 02-26 05:15:38.485 root 1294 1294 D vendor.xiaomi.hardware.mimd2: succeed registered timer 10 to TimerManager 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_5 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_5 /data/vendor/time/ats_5 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_5 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 6 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_6 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_6 /data/vendor/time/ats_6 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_6 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 7 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_7 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_7 /data/vendor/time/ats_7 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_7 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 8 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_8 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_8 /data/vendor/time/ats_8 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_8 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 9 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_9 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_9 /data/vendor/time/ats_9 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_9 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 10 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_10 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_10 /data/vendor/time/ats_10 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_10 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 11 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_11 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_11 /data/vendor/time/ats_11 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 root 1294 1297 D vendor.xiaomi.hardware.mimd2: PolicyManager, 0 policyThread run 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_11 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 12 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_12 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_12 /data/vendor/time/ats_12 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_12 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 13 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_13 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_13 /data/vendor/time/ats_13 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_13 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 14 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_14 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_14 /data/vendor/time/ats_14 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_14 02-26 05:15:38.485 root 1294 1299 D vendor.xiaomi.hardware.mimd2: PolicyManager, 2 policyThread run 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 15 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_15 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_15 /data/vendor/time/ats_15 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_15 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 16 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_16 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_16 /data/vendor/time/ats_16 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_16 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 17 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_17 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_17 /data/vendor/time/ats_17 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_17 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_post_init:Error in accessing storage 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:genoff_pre_init::Base = 18 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon: Storage Name: ats_18 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Opening File: /mnt/vendor/persist/time/ats_18 /data/vendor/time/ats_18 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:time_persistent_memory_opr:Genoff Read operation 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Open File: /data/vendor/time/ats_18 02-26 05:15:38.485 1000 1292 1292 D QC-time-services: Daemon:Unable to open filefor read"
09-13
### **日志分析:高通时间服务(QC-time-services)文件访问失败** 这些日志显示 **高通时间服务(QC-time-services)** 在尝试读取持久化时间数据文件时遇到 **文件访问失败** 的问题。以下是详细解析: --- ### **1. 关键错误分析** #### **(1)文件访问失败** - **错误内容**: - 重复出现 `Unable to open file for read` 和 `Error in accessing storage`。 - 涉及文件路径: - `/mnt/vendor/persist/time/ats_X` - `/data/vendor/time/ats_X`(`X` 为 2~18 的数字) - **原因推测**: 1. **文件不存在**:这些 `ats_X` 文件可能未被正确生成或部署。 2. **权限不足**:`QC-time-services` 进程(UID 1000)无权访问 `/vendor` 或 `/data/vendor` 下的文件。 3. **SELinux 限制**:SELinux 策略阻止了时间服务访问这些路径。 #### **(2)服务行为逻辑** - **日志模式**: - `genoff_pre_init::Base = X` → 尝试读取 `ats_X` → 失败 → 递增 `X` 继续尝试。 - 表明服务在初始化时尝试加载多个时间基准文件(可能用于不同硬件模块的时钟同步)。 - **正常预期**: - 至少部分 `ats_X` 文件应存在并可读(如高通默认配置的基值)。 #### **(3)其他关联日志** - **小米硬件服务(`mimd2`)**: - `succeed registered timer 10 to TimerManager` 表明小米的硬件计时器模块已正常启动,与高通时间服务无直接冲突。 --- ### **2. 影响评估** - **功能影响**: - 若时间服务完全无法读取持久化数据,可能导致: - **时间同步问题**:如关机后系统时间重置、NTP 同步延迟。 - **依赖时间的服务异常**:如定时任务、日志时间戳错误。 - 实际设备若时间功能正常,则可能是冗余日志(服务降级使用其他时间源)。 - **性能影响**: - 重复尝试访问文件可能轻微增加启动时间,但通常可忽略。 --- ### **3. 解决方案** #### **(1)检查文件是否存在** - 确认 `ats_X` 文件是否部署: ```bash adb shell ls -l /mnt/vendor/persist/time/ /data/vendor/time/ ``` - **若文件缺失**:需从固件包提取或重新生成。 #### **(2)修复文件权限** - 授予 `QC-time-services` 访问权限: ```bash adb shell chown -R system:system /data/vendor/time/ adb shell chmod 0660 /data/vendor/time/ats_* ``` #### **(3)调整 SELinux 策略** - 临时禁用 SELinux 测试(仅调试): ```bash adb shell setenforce 0 ``` - 永久修复需在 SELinux 策略中添加规则(如 `qc_time.te`): ```te allow qc_time vendor_time_file:file { read open }; ``` #### **(4)屏蔽非关键日志(可选)** - 若功能正常且无需修复: ```bash adb shell setprop persist.vendor.time.daemon.debug 0 ``` --- ### **4. 扩展调试** - **查看高通时间服务配置**: ```bash adb shell getprop | grep time ``` - **检查服务依赖**: ```bash adb shell dumpsys activity service com.qualcomm.timeservice ``` --- ### **5. 高通时间服务背景** - **作用**: - 管理硬件时钟(如 RTC、传感器时间同步)。 - 持久化存储时间偏移量(防止断电后时间丢失)。 - **关键文件**: - `ats_2`~`ats_18`:不同时间基准的偏移量数据(如 GPS、网络、传感器)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值