android Settings模块通过JNI接口调用获取NV中的WiFi/BT MAC地址

Settings模块通过JNI接口调用获取NV中的WiFi/BT MAC地址

高通 WiFi only版本 无法通过调用android原生接口获取WiFi 和BT MAC地址,产线测试需求需要读取NV中写入的WiFi 和BT MAC地址,通过调用高通原生代码nv.h中的方法获取nv中写入的值。

编写源文件

方法命名为Java_调用该方法的类所在包名(如:com_android_settings_wifi)_类名_此方法名(如:getWifiMAC)
如果参数env和thiz没有使用,可以后面加__unused,不然编译报错:
在这里插入图片描述

extern "C" JNIEXPORT jstring JNICALL Java_com_android_settings_wifi_WifiInfoPreferenceController_getWifiMAC(JNIEnv *env, jclass thiz __unused) {
int ret = 0;
const char *mac = "UNKNOWN";
unsigned char nv_mac[18] = {0};
unsigned char nv_read[128] = {0};
XLOGI("%s Starting...", __FUNCTION__);
ret = nvctrl_read((nv_items_enum_type)4678, nv_read, sizeof(nv_read));
if (SUCCESS == ret) {
    memset(nv_mac, 0, sizeof(nv_mac));
    sprintf((char *)nv_mac, "%02X:%02X:%02X:%02X:%02X:%02X", nv_read[0], nv_read[1], nv_read[2], nv_read[3], nv_read[4], nv_read[5]);
    XLOGI("NV WiFi MAC: %s.\n", nv_mac);
    if (strlen((const char *)nv_mac) == 17) {
        mac = (const char *)nv_mac;
    }
}
return env->NewStringUTF(mac);

Android.mk文件

# 当前文件的路径
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libSetting_wifi_bt
LOCAL_SRC_FILES := Setting_wifi_bt.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../vendor/qcom/proprietary/commonsys-intf/diag/include/ \
                    $(LOCAL_PATH)/../../../../vendor/qcom/proprietary/commonsys/fastmmi/libmmi/ \
                    $(TARGET_OUT_HEADERS)/common/inc
//当前模块所包含的标签,一个模块可以包含多个标签。标签的值可能是eng、user、debug、development、optional。其中,optional是默认标签。
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS := -Wall
//静态库
LOCAL_STATIC_LIBRARIES :=libcutils

//动态库:注释掉是因为编译的时候没找到就报错了
#LOCAL_SHARED_LIBRARIES := \
#    libdl \
#    libmmi \
#    libdiag_system \
#    liblog

LOCAL_LDLIBS := -ldl -llog -lmmi -ldiag_system
LOCAL_PRODUCT_MODULE := true
LOCAL_CERTIFICATE := platform
//编译生成共享库,并打包成.so文件
include $(BUILD_SHARED_LIBRARY)

调用

        /* return: WiFi MAC string */
+    public native String getWifiMAC();
+
+           /* return: (>= 0: SUCCESS; < 0: FAILED) */
+    public native int nvctrlInit();
+
+    /* return: (>= 0: SUCCESS; < 0: FAILED) */
+    public native int nvctrlDeinit();
+
+       static {
+        System.loadLibrary("Setting_wifi_bt");
final String macAddressnv = getNvWifiMAC();

验证

一般硬件测试MMI中获取MAC地址是通过读NV的方式,
首先通过QXDM工具写入MAC地址值
进入硬件测试MMI工具查看写入的值
进入WiFi——关于手机或者Settings—wifi----wifi preference查看时候获取到写入的nv值
如果是通过单刷Settings apk验证而不是刷版本验证,需要将生成的so文件push到对应的目录下:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值