在 C++ 代码中正确地使用 Binder 交互所需的命名规则。
Binder 是 Android 所采用的一种进程间通信机制,Android NDK 为 C++ 开发者提供了使用 Binder 的接口。 在使用 Binder 时,应注意命名规则,以确保 C++ 代码与 Java 所使用的 Binder 接口相互兼容。
以下是一些使用 Binder 时应注意的命名规则:
Java 类名必须与 C++ 类名相对应,且 Java 类名必须以“android.os.I”为前缀,C++ 类名必须以“Bp”或“Bn”为前缀。例如,对于 Java 类 SentinelInterface,相应的 C++ 类名为 BpSentinelInterface 或 BnSentinelInterface。
对于 Binder 接口的每个方法,C++ 函数名必须与 Java 方法名相对应。C++ 函数必须以“transact_”为前缀,后跟 Java 方法名的哈希值。例如,对于 Java 方法“getSentinel”,相应的 C++ 函数名可能是“transact_getSentinel_9dcb26dd”。
对于 Binder 接口中的数据结构,Java 中的字段名称必须与 C++ 中的字段名称相对应。Java 中的字段必须是 public static final 类型(类似于 C++ 中的常量),C++ 中的字段必须是 const 类型。
下面是一个使用 Binder 的示例(假设存在一个名为 SentinelInterface 的 Java 接口):
Java 代码:
public interface SentinelInterface extends IInterface { static final int GET_SENTINEL = IBinder.FIRST_CALL_TRANSACTION + 0; String getSentinel() throws RemoteException; }
C++ 代码:
class BpSentinelInterface : public BpInterface
上一篇:AndroidNDK编译错误:未定义符号:__strlen_chk。
下一篇:AndroidNDKBuild:ld:error:failedtowritetotheoutputfile:Permissiondenied。