uni-app同一个项目生成不同的APK,比如说一个正式版、一个测试版

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app同一个项目生成不同的APK,比如说一个正式版、一个测试版

开发环境 版本号 项目创建方式

比如我项目开发完了,我需要给打一个测试域名的包和一个正式域名的包,应该怎么做,有环境变量什么的么 ,自定义基座虽然是dev 但是无法单独在手机中安装。但是云打包只能打包pro 的域名有什么办法吗

1 回复

在uni-app项目中生成不同环境的APK(如正式版和测试版),通常涉及到配置管理和打包流程的调整。以下是一个基于Vue.js和uni-app框架的示例,展示如何通过不同的配置生成不同的APK文件。

1. 配置环境变量

首先,在manifest.json文件中配置不同的环境变量。你可以使用mp-weixin或者其他小程序的配置作为参考,uni-app也支持类似的配置方式,尽管最终打包成APK时,这些配置会通过自定义脚本或工具链进行处理。

manifest.json

{
  "mp-weixin": { // 示例,实际针对APK需使用HBuilderX打包配置或自定义脚本
    "appid": "your-appid",
    "setting": {
      "urlCheck": false
    },
    "env": {
      "development": {
        "API_BASE_URL": "https://test-api.example.com"
      },
      "production": {
        "API_BASE_URL": "https://api.example.com"
      }
    }
  }
}

注意:manifest.json对于直接区分APK打包环境不是最直观的方式,这里主要是为了展示环境变量的配置思路。实际中,你可能需要在vue.config.js或者自定义的打包脚本中处理这些环境变量。

2. 使用自定义脚本打包

在项目的根目录下创建一个build-scripts文件夹,并在其中添加一个build.js脚本来处理不同环境的打包。

build-scripts/build.js

const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');

const envs = ['development', 'production'];

envs.forEach(env => {
  process.env.NODE_ENV = env;
  const manifestPath = path.resolve(__dirname, '../manifest.json');
  // 这里假设你有一个函数来修改manifest.json中的环境变量配置
  modifyManifestForEnv(manifestPath, env);
  
  execSync(`hbuilderx.exe --build --platform=android --mode=${env}`, {
    stdio: 'inherit'
  });
});

function modifyManifestForEnv(manifestPath, env) {
  // 实现修改manifest.json中环境变量的逻辑
  // 注意:这里仅为示例,实际可能需要更复杂的逻辑来动态修改配置
  let manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
  // 假设你已经有了逻辑来根据env更新manifest中的配置
  fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf8');
}

3. 运行打包脚本

在命令行中运行你的打包脚本:

node build-scripts/build.js

这个脚本会根据developmentproduction两个环境分别打包APK文件。你需要确保hbuilderx.exe的路径正确,并且你的HBuilderX已经配置好Android打包环境。

通过这种方式,你可以为不同的环境生成不同的APK文件,满足正式版和测试版的需求。

回到顶部