uni-app 离线打包安卓APK(Release)安装到手机上无法联网
uni-app 离线打包安卓APK(Release)安装到手机上无法联网
产品分类:
uniapp/App
项目信息 | 值 |
---|---|
PC开发环境 | Mac |
PC操作系统版本 | 12.3.1 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.3.13 |
手机系统 | Android |
手机系统版本 | Android 9.0 |
手机厂商 | 华为 |
手机机型 | 华为 P10 plus |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
示例代码:
import API from './api.js'
import STORE from '../store.js'
let version = ''
const TIMEOUT = 30000
const PARAMS = data => {
let _params = []
for (const k in data) {
_params.push(`${encodeURIComponent(k)}=${encodeURIComponent(data[k])}`)
}
return _params.join('&')
}
/**
* APP网络请求
* @param {Object} options
*/
function _AppNet(options) {
let _header = {
Accept: 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
}
const _method = options.method.toUpperCase()
const URL = (options.params && Object.keys(options.params).length !== 0 && _method === 'POST') ? `${options.url}?${PARAMS(options.params)}` : options.url
const _token = uni.getStorageSync('token')
if (_token && _token.length !== 0) {
_header['Authorization'] = `Bearer ${_token}`
}
// #ifdef APP-PLUS
_header['client-type'] = 'android'
if (version === '') {
plus.runtime.getProperty(plus.runtime.appid, wgtinfo => {
version = wgtinfo.version
})
}
_header['client-version'] = version
// #endif
// #ifdef MP-WEIXIN
_header['client-type'] = 'wechat_mini_program'
// #endif
// 是否显示加载loading
options.loading && uni.showLoading({ title: '加载中...', mask: true })
return uni.request({
url: API.root + URL,
data: options.data,
header: _header,
method: _method,
dataType: 'json',
timeout: TIMEOUT
}).then(data => {
options.loading && uni.hideLoading()
const [err, res] = data
if (err) {
options.error && _errorToast(-1)
return err
}
const _data = res.data
options.error && _errorToast(_data.code, _data.msg)
if (_data.code === 3) _forceLogout()
return _data
})
/**
* 网络请求错误提示
* @param {Object} code 错误代码
* @param {Object} msg 错误信息
*/
function _errorToast(code, msg) {
code !== 0 && code !== 3 && code !== 80103 && uni.showToast({ icon: 'none', title: msg || '网络异常,请稍候再试' })
}
// 强制用户退出
function _forceLogout() {
uni.showToast({
icon: 'none',
title: '登录状态失效,请重新登录',
success() {
uni.clearStorageSync()
setTimeout(() => {
// #ifdef APP-PLUS
uni.reLaunch({ url: '/pages/start/app/index'})
// #endif
// #ifdef MP-WEIXIN
uni.reLaunch({ url: '/pages/start/index'})
// #endif
}, 800)
}
})
}
}
export default {
$api: API.$api,
// #ifdef MP-WEIXIN
loginCode() {
return new Promise(resolve => {
uni.login({
success(res) { resolve(res.code || null) },
fail() { resolve(null) }
})
})
},
checkSession() {
return new Promise(resolve => {
uni.checkSession({
success() { resolve(true) },
fail() { resolve(false) }
})
})
},
wxMiniLogin(code) {
return new Promise(resolve => {
uni.showModal({
title: '温馨提示',
content: `微信授权登录后才能正常使用“${getApp().globalData.appName}"`,
cancelColor: '#de6352',
confirmColor: '#206ddb',
success(modal) {
if (modal.confirm) {
uni.getUserProfile({
lang: 'zh_CN',
desc: '展示并完善用户资料信息',
success(res) {
if (res.iv && res.encryptedData) {
STORE.commit('setUserInfo', {
avatar: res.userInfo.avatarUrl,
nickname: res.userInfo.nickName
})
resolve(_AppNet({
loading: true,
url: API.$api.login.wx_mini,
method: 'POST',
data: { code, iv: res.iv, encrypted_data: res.encryptedData }
}))
} else {
resolve(null)
}
},
fail() {
resolve(null)
}
})
} else {
resolve(null)
}
}
})
})
},
// #endif
get(url, options) {
return _AppNet({
url, method: 'GET',
data: (options && options.data) ? options.data : {},
error: options ? (options.error === false ? false : true) : true,
loading: options ? (options.loading === false ? false : true) : true
})
},
post(url, options) {
return _AppNet({
url, method: 'POST',
data: (options && options.data) ? options.data : {},
params: (options && options.params) ? options.params : {},
error: options ? (options.error === false ? false : true) : true,
loading: options ? (options.loading === false ? false : true) : true
})
}
}
操作步骤:
- 同一份代码,离线打包apk
预期结果:
- 安装到手机上正常访问网络
实际结果:
- 安装到手机上无法联网
bug描述:
- 同一份代码,在小程序、iOS模拟器、Android模拟器均可以正常访问网络,但根据相关文档在Android Studio(2021.1.1 Patch 3)配置好离线SDK工程打包Release包安装到手机上就无法联网
更多关于uni-app 离线打包安卓APK(Release)安装到手机上无法联网的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 离线打包安卓APK(Release)安装到手机上无法联网的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 离线打包安卓 APK 后,如果安装到手机上无法联网,可能是由于以下几个原因导致的。你可以按照以下步骤进行排查和解决:
1. 检查网络权限
确保在 AndroidManifest.xml
文件中已经添加了网络权限。如果没有添加,应用程序将无法访问网络。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 打开
AndroidManifest.xml
文件(通常位于app/src/main/AndroidManifest.xml
)。 - 确保上述权限已经添加。
2. 检查 HTTPS 配置
如果应用访问的是 HTTPS 接口,确保服务器证书是有效的,并且客户端支持 HTTPS 请求。如果证书有问题,可能会导致请求失败。
- 如果是自签名证书,需要在客户端进行特殊处理。
- 确保服务器配置正确,支持 HTTPS 请求。
3. 检查网络请求代码
确保在 uni-app 中的网络请求代码没有问题。例如,使用 uni.request
时,检查 URL 是否正确,请求方法是否匹配。
uni.request({
url: 'https://example.com/api',
method: 'GET',
success: (res) => {
console.log(res.data);
},
fail: (err) => {
console.error('请求失败', err);
}
});
4. 检查 Release 模式配置
在 Release 模式下,某些配置可能与 Debug 模式不同,导致网络请求失败。
- 确保
build.gradle
文件中没有禁用网络请求的配置。 - 检查是否启用了混淆(ProGuard),如果启用了,确保网络请求相关的类没有被混淆。
在 proguard-rules.pro
文件中添加以下规则:
-keep class com.tencent.** { *; }
-keep class com.alibaba.** { *; }
-keep class com.taobao.** { *; }