1. 实现功能综述
1.1 功能概述
将使用HBuilder 开发的 5+App 项目,通过 jenkins 实现自动化打包apk。
1.2 功能流程图

2. 功能实现
为了更好的理解模板修改的内容与构建流程,请先参照 HBuilderX 官方文档 自己走一遍流程。
2.1 环境说明
- jdk1.8
- android sdk
- gradle5.4+ ( 已内置到app demo 中)
- app-demo 中的环境
- 基于 androidX
- build-tools;29.0.3
- platforms;android-29
2.2 环境安装
jdk1.8 安装
android SDK 安装
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -O /usr/local/src/sdk-tools-linux-4333796.zipmkdir /usr/local/android/sdk -punzip /usr/local/src/sdk-tools-linux-4333796.zip -d /usr/local/android/sdk
app-demo 模板中的依赖环境安装
- build-tools;29.0.3
- platform-tools
- platforms;android-29
```bash
cd /usr/local/android/sdk/
安装最新platform-tools与SDK level 29等
./tools/bin/sdkmanager “build-tools;29.0.3” “platform-tools” “platforms;android-29”
在当前目录查看是否多了build-tools licenses platforms platform-tools目录
ll
<a name="0rrAA"></a>### 配置环境变量```bash# 配置 android sdk 环境变量cat > /etc/profile.d/android.sh << EOFexport ANDROID_HOME=/usr/local/android/sdkexport ANDROID_SDK=/usr/local/android/sdkexport PATH=\${PATH}:\${ANDROID_HOME}/tools/:\${ANDROID_HOME}/tools/bin/:\${ANDROID_HOME}/platform-tools/:\${ANDROID_HOME}/build-tools/29.0.3/EOF
2.3 app-demo 中的模板配置修改说明 (选读)
已可以通过 make_config_file.py 自动修改
2.3.1 需要修改的配置
配置应用版本号
app/build.gradle根据manifest.json中的配置修改
要修改的字段与功能说明如下:
versionCode # 应用的版本号(整数值),用于各应用市场的升级判断versionName # 应用的版本名称(字符串),在系统应用管理程序中显示的版本号applicationId # 应用的包名,一般设置为反向域名,不建议修改。targetSdkVersion # 建议设置为25或以上minSdkVersion # App离线SDK minSdkVersion最低支持19,小于19在部分4.4以下机型上将无法正常使用。
配置应用名称
app/src/main/res/values/strings.xml根据manifest.json中的name配置修改
要修改的字段与功能说明
app_name # 该值为安装到手机上桌面显示的应用名称
配置应用启动页 ( 此步模板中已添加, 不需要处理)
app/src/main/Androidmanifest.xml
<activityandroid:name="io.dcloud.PandoraEntry"android:configChanges="orientation|keyboardHidden|keyboard|navigation"android:label="@string/app_name"android:launchMode="singleTask"android:hardwareAccelerated="true"android:theme="@style/TranslucentTheme"android:screenOrientation="user"android:windowSoftInputMode="adjustResize" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name="io.dcloud.PandoraEntryActivity"android:launchMode="singleTask"android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard"android:hardwareAccelerated="true"android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"android:screenOrientation="user"android:theme="@style/DCloudTheme"android:windowSoftInputMode="adjustResize"><intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><action android:name="android.intent.action.VIEW" /><data android:scheme="h56131bcf" /></intent-filter></activity>
配置应用图标和启动界面
图标名称:
- icon.png : 应用的图标。
- push.png : 推送消息的图标。
- splash.png : 应用启动页的图标。
# 1. copy 图标资源到工程PROJECT_NAME=""cp ${PROJECT_NAME}/img/{icon.png,push.png,splash.png} app/src/main/res/drawable/# 2. 修改Androidmanifest.xml中application节点的icon属性为@drawable/icon (模板文件中已修改)
2.3.2 打包资源配置
PROJECT_ID="" # 从 manifest.json 中获取mkdir app/src/main/assets/apps/${PROJECT_ID}/www/cp -a ${PROJECT_NAME}/* app/src/main/assets/apps/${PROJECT_ID}/www/# 修改 app/src/main/assets/data/dcloud_control.xml文件 中的 appid 与 上面的 PROJECT_ID 一致
2.4 jenkins 配置流程说明
- 先拉取
app-demo配置模板文件 - 拉取项目代码到 app-demo 目录
- 执行 make_config_file.py 修改模板中的配置
- build 打包。
3. 常见问题与注意事项
3.1 注意
3.2 build 常见问题
Q: Warning: File ~/.android/repositories.cfg could not be loaded.
A: touch ~/.android/repositories.cfgQ: Warning: Failed to read or create install properties file.
A: $ANDROID_HOME 目录权限问题chmod -R 755 $ANDROID_HOME chown -R USER.USER $ANDROID_HOMEQ:打出来的包安装后有两个图标
A:<activity><intent-filter><!-- 多个标签中配置了 下面两个标签. 删除即可 --><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
Q: jenkins 打包是报错: Task :app:lint FAILED
A: 由于代码的不规范,导致打包时有 waring , error ,异常终止。# 在 build.gradle 的 android{} 中增加:lintOptions {checkReleaseBuilds false// Or, if you prefer, you can continue to check for errors in release builds,// but continue the build even when errors are found:abortOnError false}lintOptions {abortOnError false}
