首页 APP开发 正文内容

使用 UTS 开发原生安卓插件,运行时报错:Error: targetMethod error: java.lang.IllegalStateException

2023年08月31日 , , 99

分享一个开发 UTS 插件时运行报错的解决方法。

UTS 报错信息

UTS 是今年 uni-app 新推出的编程语言,用来开发安卓和 iOS 原生插件,这种语言最大的优势是会编译成手机原生运行的代码,性能很高。

在用 UTS 开发安卓插件,运行到手机时控制台出现下面报错信息:

Error: targetMethod error: java.lang.IllegalStateException: Please register permissions in the 
AndroidManifest.xml file <uses-permission android: name="android.permission.READ_PHONE_NUMBERS" />
UTS 报错截图
UTS 报错截图

伴随报错信息,应用也没有启动起来,这是什么原因呢?

报错分析

我在刚开始学习 UTS 语言时,下载官方的 Hello UTS 源码运行时,也出现了这个报错,根据报错信息 Please register permissions in the AndroidManifest.xml file 大概就知道问题出在哪了,其实就是 UTS 代码中调用了获取电话号码的系统权限,要成功执行这样的代码,需要配置好权限。

解决方法

找到 uni-app 目录下的 AndroidManifest.xml 文件,如果没有这个文件,就新建一个,添加一下内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 
  package="io.dcloud.nativeresouce">
    <!--permissions-->
    <!-- 添加读取设备标识权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>

添加好上面三行权限后,需要重新打包自定义基座来运行。如果还需要其他权限,可以参考 Android 原生应用清单文件配置方法。重新打包基座后再次运行,报错就消失了,问题解决。