Flutter打包release版本后,安卓apk包真机安装无法请求网络的解决方法

4,797 阅读1分钟

今天用flutter打了一个release版本的正式包,但是安装到真机上发现却无法访问网络。各个接口都不通,连登陆页面都进不去。

err05

在网上查找搜索了一些资料,发现问题所在,安卓开发中flutter应用没有网络权限。

在路径android/src/main/AndroidManifest.xml,在AndroidManifest.xml文件的manifest标签下加入以下代码,注意不要放到application里.:

<!-- 访问电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<!-- 允许全部网络访问 -->
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- 获取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<!-- 获取当前设备存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

添加配置之后

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fushikang_flutter">
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Flutter"
        android:icon="@mipmap/ic_launcher">
        ...
    </application>
    <!-- 访问电话状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <!-- 允许全部网络访问 -->
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- 获取网络信息状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <!-- 获取当前设备存储权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest>

在这个文件里,android\app\src\profile\AndroidManifest.xml, 添加之后

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fushikang_flutter">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <!-- 访问电话状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <!-- 允许全部网络访问 -->
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- 获取网络信息状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <!-- 获取当前设备存储权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest>

但是请注意,重新打包后真机还是无法请求网络数据

然后继续找,结果发现~~~

在项目中android\app\src\profile\AndroidManifest.xml,也有一个AndroidManifest.xml文件,同样的在 manifest 标签里添加这几段代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fushikang_flutter">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <!-- 访问电话状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <!-- 允许全部网络访问 -->
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- 获取网络信息状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 获取当前设备存储权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest>

在这个文件中可能默认会有这个代码,我们覆盖就行

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

最后重新打包,真机安装,ok可以正常访问网络数据了