文章目录

  • 一、前言:莫名其妙的ACCESS_FINE_LOCATION权限
  • 二、猜想与验证
    • 1、猜想
    • 2、验证猜想
  • 三、真相与解决
    • 1、真相
    • 2、解决办法
  • 四、结束语

一、前言:莫名其妙的ACCESS_FINE_LOCATION权限

嗨,大家好,我是新发。
最近上传包到Google Play被拒了,原因是apk中申请了ACCESS_FINE_LOCATION权限。

事实上我们并没有使用地理位置相关的SDK,在AndroidManifest.xml中也没有申请这个权限。
但是打出包后,拆包发现确实多了ACCESS_FINE_LOCATION权限。

为什么呢?

二、猜想与验证

1、猜想

我想起了我之前写的这篇文章:《无需接入SDK即可在Unity中获取经纬度(Android/iOS),告诉我你的坐标》
我们通过Input.location即可获得地理位置的经纬度信息,在Android设备上,肯定是需要对应的权限的,而我们使用Input.location时并不需要手动在AndroidManifest.xml中申请对应的权限,这是怎么做到的?
直觉告诉我,Unity自己帮我们加上去的,为了验证这个猜想,我弄个小Demo测试一下。

2、验证猜想

首先,创建一个空工程,转Android平台,不写任何代码,打包apk

将打出来的apk拖到AndroidStudio中,可以直接查看包内的AndroidManifest.xml,可以看到,没有申请ACCESS_FINE_LOCATION权限。

接着,回到Unity中,我们创建一个脚本,在脚本中访问一下Input.location,如下:

using UnityEngine;public class Main : MonoBehaviour
{void Start(){var location = Input.location;}
}

然后重新打包apk,再使用AndroidStudio查看打出来的apkAndroidManifest.xml
好家伙,真的自己加上了ACCESS_FINE_LOCATION权限。

猜想验证成功,也就是说,只要引用了Input.location,打包apkUnity就会自动加上ACCESS_FINE_LOCATION权限。

事实上,在Unity手册中也有提到这个。见这里:https://docs.unity3d.com/Manual/android-manifest.html

三、真相与解决

1、真相

根据我们上面的结论,回到提审Google Play的项目工程中,查找Input.location的引用,发现,居然是tolua的锅。
因为工程中使用了tolua框架,里面为Input类生成了UnityEngine_InputWrap类,在UnityEngine_InputWrap中引用了Input.location

// UnityEngine_InputWrap.cs[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
static int get_location(IntPtr L)
{try{ToLua.PushObject(L, UnityEngine.Input.location);return 1;}catch(Exception e){return LuaDLL.toluaL_exception(L, e);}
}

关于tolua框架的使用,可以参见我之前写的这篇文章:《Unity使用tolua框架教程: LuaFramewrk》

2、解决办法

解决办法就是把UnityEngine_InputWrap中的get_location注释掉,

// UnityEngine_InputWrap.cs// 不要引用Input.location,否则会自动引入ACCESS_FINE_LOCATION权限
// L.RegVar("location", get_location, null);// .../* 不要引用Input.location,否则会自动引入ACCESS_FINE_LOCATION权限
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
static int get_location(IntPtr L)
{try{ToLua.PushObject(L, UnityEngine.Input.location);return 1;}catch(Exception e){return LuaDLL.toluaL_exception(L, e);}
}
*/

接着,将UnityEngine_InputWrap.cs移动到LuaFramework/ToLua/BaseType目录中,
再接着,把CustomSettings.cs中的_GT(typeof(Input))注释掉。

// CustomSettings.cs// 不要主动生成`UnityEngine_InputWrap类,移动到BaseType目录中
//_GT(typeof(Input)),

最后,记得在LuaState.cs中加上UnityEngine_InputWrap.Register(this);

// LuaState.csBeginModule("UnityEngine");
// ...
UnityEngine_InputWrap.Register(this);
// ...
EndModule();

四、结束语

完毕。
喜欢Unity的同学,不要忘记点击关注,如果有什么Unity相关的技术难题,也欢迎留言或私信~

【游戏开发问题】Unity自己莫名其妙添加了ACCESS_FINE_LOCATION权限的问题相关推荐

  1. 王楠——海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性

    海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性 发表于2012-09-07 17:24| 12534次阅读| 来源CSDN整理| 0 条评论| 作者杨依帆 游戏开发Unity游戏引擎王楠 ...

  2. Unity 2D游戏开发视频教程 Unity 2D Game Developer Course Farming RPG

    Unity 2D游戏开发视频教程 Unity 2D Game Developer Course Farming RPG Unity 2D游戏开发课程农业RPG MP4 |视频:h264,1280×72 ...

  3. 【Android游戏开发之七】(游戏开发中需要的样式)再次剖析游戏开发中对SurfaceView中添加组件方案!...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/308.html   ...

  4. 游戏开发技术Unity开发引擎

    Unity 是一个完全集成的开发引擎,提供了丰富的开箱即用的功能,用于创建游戏及其他互动式3D内容.您可以使用Unity 将艺术和资源组装到场景和环境:增加物理效果:同步播放测试和编辑您的游戏,并在准 ...

  5. 【2d游戏开发】unity实现UI框架搭建

    前言 前面一直比较忙,然后到现在才继续接游戏的文章,那么本次将带大家去搭建一个ui框架,同样,需要更具体的教学,可以到b站搜索本人的关于2d游戏开发-unity实现xxx的系列视频. 步骤 其实大致的 ...

  6. 【游戏开发】unity教程8 用IMGUI和UGUI实现血条

    github传送门:https://github.com/dongzizhu/unity3DLearning/tree/master/hw8/enhancedDisk 视频传送门:https://sp ...

  7. 【游戏开发】unity教程4 打飞碟小游戏

    github传送门:https://github.com/dongzizhu/unity3DLearning/tree/master/hw4/Disk 视频传送门:https://space.bili ...

  8. 【游戏开发】unity教程10 VR库 Vuforia

    github传送门:https://github.com/dongzizhu/unity3DLearning/tree/master/hw10/ARtest B站传送门:https://space.b ...

  9. 【从零开始游戏开发】Unity 前后端网络通信该如何搭建?注释解答 | 全面总结 |建议收藏

    你知道的越多,你不知道的越多

最新文章

  1. 网络2网络布线与数制转换
  2. 使用cat /proc/进程id/maps 查看进程内存映射
  3. Python 3.9来了!这十个新特性值得关注
  4. -9 逆序输出一个整数的各位数字_计算机基础知识: 信息数字化
  5. CentOS 7 安装Apache 2.4.39
  6. 深究AngularJS——校验(非form表单)
  7. 第十三届东北师范大学程序设计竞赛热身赛 C(exgcd+欧拉函数)
  8. 如果被问到分布式锁,应该怎样回答?
  9. idea terminal终端修改为git bash设置
  10. jeecg boot一对多新增的附表不会主键是一个string_测试开发专题:spring-boot如何使用JPA进行双向一对多配置...
  11. 贾跃亭造车实验室首曝光:正积极推进FF91量产工作
  12. 基于jquery的tab切换
  13. 读文件到十六进制的函数(Delphi 7 下可用) - 回复 峰哥!!! 的问题
  14. 尚硅谷Docker---docker安装及简介
  15. 基于SSM的医院病历管理系统
  16. linux磁带机找不到,如何在Linux下安装磁带机
  17. HP台式机清灰后无法启动的解决办法
  18. 添加Nginx ALG模块支持FTP协议ALG
  19. Incorrect string value: '\xF0\x9F\x91\x93\xF0\x9F...' for column 'xxx' at row 1
  20. ROS小车PS2遥控器的使用注意事项

热门文章

  1. 【PTA R7-8】简单选择排序显示第K趟
  2. 分析计算机测色配色不准确的原因,实用技术∣如何有效利用电脑测色配色
  3. Android 自定义View中坐标点的理解学习(一)
  4. jmeter 聚合报告之jtl文件解析
  5. 重度中暑为何致命?中国科学家找到致死机理
  6. 不可不知的IEEE 802.15.4和ZigBee基础
  7. html rgb转换16进制js,JS实现颜色值格式转换 rgb和十六进制的转换
  8. iOS 高级开发 KVC(一)
  9. 安卓4.3新功能:帅呆了!
  10. wxWidgets Ubuntu下安装 配置 编译 创建项目 实现“hello world”(CodeBlocks)详细图文教程