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.zip
mkdir /usr/local/android/sdk -p
unzip /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 << EOF
export ANDROID_HOME=/usr/local/android/sdk
export ANDROID_SDK=/usr/local/android/sdk
export 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
<activity
android: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>
<activity
android: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_HOME
Q:打出来的包安装后有两个图标
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
}