Android 通过JNI获取MAC地址(适配Android6.0及以上)

本文介绍了如何在Android 6.0及以上版本通过JNI编程获取MAC地址,由于6.0之后旧方法失效,文章详细阐述了使用NetworkInterface.getByName获取硬件地址并进行16进制转换的过程。此外,讨论了在C++层直接处理MAC地址以进行加密等操作,以增强代码安全性,防止轻易反编译。

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

最近项目中遇到需要在C++层进行加密,然后编译成so。我们知道,MAC地址能够辨别设备的唯一性。所以有个需求就是需要在C++层获取MAC地址,这里我们就需要用到JNI编程了,话不多说,开始看看如何获取吧。

在这之前,不要忘记添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission  android:name="android.permission.ACCESS_WIFI_STATE" />

首先,我们来看看java中是怎么获取的。Android6.0之前的方法在6.0之后已经无法获取成功。所以我们直接使用最新的获取方法。代码很简单,通过静态方法getByName获取NetworkInterface实例,然后通过getHardwareAddress()获取byte[]数组,注意这里获取到的是16进制的数组,需要转换。

/**
     * 获取设备MAC地址
     * */
    public static String getMacAddress() {
 /*获取mac地址有一点需要注意的就是android 6.0版本后,以下注释方法不再适用,不管任何手机都会返回"02:00:00:00:00:00"这个默认的mac地址,这是googel官方为了加强权限管理而禁用了getSYstemService(Context.WIFI_SERVICE)方法来获得mac地址。*/
        //        String macAddress= "";
//        WifiManager wifiManager = (WifiManager) MyApp.getContext().getSystemService(Context.WIFI_SERVICE);
//        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
//        macAddress = wifiInfo.getMacAddress();
//        return macAddress;

        String macAddress = null;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值