用代码获取unity打包安卓apk的md5值

在Unity游戏中加一个签名验证对防止反编译后二次打包。


先来个参考unity链接 http://www.jianshu.com/p/b7e43696ee50,这个是

FileUtility是没有的,不过和下面这个有联系
安卓代码获得md5值链接http://www.jianshu.com/p/e7fa21c4d3cf
接下来结合上面两部分,得出安卓调用unity的调用方法,下面直接祭出代码,睡觉。。。
public static string GetSignatureMD5Hash()
        {
            var player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            var activity = player.GetStatic<AndroidJavaObject>("currentActivity");
            var PackageManager = new AndroidJavaClass("android.content.pm.PackageManager");


            var packageName = activity.Call<string>("getPackageName");


            var GET_SIGNATURES = PackageManager.GetStatic<int>("GET_SIGNATURES");
            var packageManager = activity.Call<AndroidJavaObject>("getPackageManager");
            var packageInfo = packageManager.Call<AndroidJavaObject>("getPackageInfo", packageName, GET_SIGNATURES);
            var signatures = packageInfo.Get<AndroidJavaObject[]>("signatures");
            


            if (signatures != null && signatures.Length > 0)
            {
                byte[] bytes = signatures[0].Call<byte[]>("toByteArray");
               string str= getSignValidString(bytes);
                Debug.Log(string.Format("<color=#ffffffff><---{0}-{1}----></color>", str, "test1"));


                return str;


            }


            return null;
        }




        private static String getSignValidString(byte[] paramArrayOfByte)
        {
            var MessageDigest = new AndroidJavaClass("java.security.MessageDigest");
            var localMessageDigest = MessageDigest.CallStatic<AndroidJavaObject>("getInstance","MD5");
            
            localMessageDigest.Call("update", paramArrayOfByte);
            return toHexString(localMessageDigest.Call<byte[]>("digest"));
        }


        public static String toHexString(byte[] paramArrayOfByte)
        {
            if (paramArrayOfByte == null)
            {
                return null;
            }
            StringBuilder localStringBuilder = new StringBuilder(2 * paramArrayOfByte.Length);
            for (int i = 0; ; i++)
            {
                if (i >= paramArrayOfByte.Length)
                {
                    return localStringBuilder.ToString();
                }
                String str = new AndroidJavaClass("java.lang.Integer").CallStatic<String>("toString", 0xFF & paramArrayOfByte[i],16);
                if (str.Length == 1)
                {
                    str = "0" + str;
                }
                localStringBuilder.Append(str);
            }
        }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值