1. 实现功能综述

1.1 功能概述

将使用HBuilder 开发的 5+App 项目,通过 jenkins 实现自动化打包apk。

1.2 功能流程图

image.png

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 安装

  1. wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -O /usr/local/src/sdk-tools-linux-4333796.zip
  2. mkdir /usr/local/android/sdk -p
  3. 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

  1. <a name="0rrAA"></a>
  2. ### 配置环境变量
  3. ```bash
  4. # 配置 android sdk 环境变量
  5. cat > /etc/profile.d/android.sh << EOF
  6. export ANDROID_HOME=/usr/local/android/sdk
  7. export ANDROID_SDK=/usr/local/android/sdk
  8. export PATH=\${PATH}:\${ANDROID_HOME}/tools/:\${ANDROID_HOME}/tools/bin/:\${ANDROID_HOME}/platform-tools/:\${ANDROID_HOME}/build-tools/29.0.3/
  9. EOF

2.3 app-demo 中的模板配置修改说明 (选读)

已可以通过 make_config_file.py 自动修改

2.3.1 需要修改的配置

配置应用版本号

app/build.gradle 根据 manifest.json 中的配置修改

要修改的字段与功能说明如下:

  1. versionCode # 应用的版本号(整数值),用于各应用市场的升级判断
  2. versionName # 应用的版本名称(字符串),在系统应用管理程序中显示的版本号
  3. applicationId # 应用的包名,一般设置为反向域名,不建议修改。
  4. targetSdkVersion # 建议设置为25或以上
  5. minSdkVersion # App离线SDK minSdkVersion最低支持19,小于19在部分4.4以下机型上将无法正常使用。

配置应用名称

app/src/main/res/values/strings.xml 根据 manifest.json 中的 name 配置修改

要修改的字段与功能说明

  1. app_name # 该值为安装到手机上桌面显示的应用名称

配置应用启动页 ( 此步模板中已添加, 不需要处理)

app/src/main/Androidmanifest.xml

  1. <activity
  2. android:name="io.dcloud.PandoraEntry"
  3. android:configChanges="orientation|keyboardHidden|keyboard|navigation"
  4. android:label="@string/app_name"
  5. android:launchMode="singleTask"
  6. android:hardwareAccelerated="true"
  7. android:theme="@style/TranslucentTheme"
  8. android:screenOrientation="user"
  9. android:windowSoftInputMode="adjustResize" >
  10. <intent-filter>
  11. <action android:name="android.intent.action.MAIN" />
  12. <category android:name="android.intent.category.LAUNCHER" />
  13. </intent-filter>
  14. </activity>
  15. <activity
  16. android:name="io.dcloud.PandoraEntryActivity"
  17. android:launchMode="singleTask"
  18. android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard"
  19. android:hardwareAccelerated="true"
  20. android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"
  21. android:screenOrientation="user"
  22. android:theme="@style/DCloudTheme"
  23. android:windowSoftInputMode="adjustResize">
  24. <intent-filter>
  25. <category android:name="android.intent.category.DEFAULT" />
  26. <category android:name="android.intent.category.BROWSABLE" />
  27. <action android:name="android.intent.action.VIEW" />
  28. <data android:scheme="h56131bcf" />
  29. </intent-filter>
  30. </activity>

配置应用图标和启动界面

图标名称:

  • icon.png : 应用的图标。
  • push.png : 推送消息的图标。
  • splash.png : 应用启动页的图标。
  1. # 1. copy 图标资源到工程
  2. PROJECT_NAME=""
  3. cp ${PROJECT_NAME}/img/{icon.png,push.png,splash.png} app/src/main/res/drawable/
  4. # 2. 修改Androidmanifest.xml中application节点的icon属性为@drawable/icon (模板文件中已修改)

2.3.2 打包资源配置

  1. PROJECT_ID="" # 从 manifest.json 中获取
  2. mkdir app/src/main/assets/apps/${PROJECT_ID}/www/
  3. cp -a ${PROJECT_NAME}/* app/src/main/assets/apps/${PROJECT_ID}/www/
  4. # 修改 app/src/main/assets/data/dcloud_control.xml文件 中的 appid 与 上面的 PROJECT_ID 一致

2.4 jenkins 配置流程说明

  1. 先拉取 app-demo 配置模板文件
  2. 拉取项目代码到 app-demo 目录
  3. 执行 make_config_file.py 修改模板中的配置
  4. build 打包。

3. 常见问题与注意事项

3.1 注意

jenkins 构建前 要清除项目的工作空间
**

3.2 build 常见问题

  1. Q: Warning: File ~/.android/repositories.cfg could not be loaded.
    A: touch ~/.android/repositories.cfg

  2. Q: Warning: Failed to read or create install properties file.
    A: $ANDROID_HOME 目录权限问题
    chmod -R 755 $ANDROID_HOME chown -R USER.USER $ANDROID_HOME

  3. Q:打出来的包安装后有两个图标
    A:

    1. <activity>
    2. <intent-filter>
    3. <!-- 多个标签中配置了 下面两个标签. 删除即可 -->
    4. <action android:name="android.intent.action.MAIN" />
    5. <category android:name="android.intent.category.LAUNCHER" />
    6. </intent-filter>
    7. </activity>
  4. Q: jenkins 打包是报错: Task :app:lint FAILED
    A: 由于代码的不规范,导致打包时有 waring , error ,异常终止。

    1. # 在 build.gradle 的 android{} 中增加:
    2. lintOptions {
    3. checkReleaseBuilds false
    4. // Or, if you prefer, you can continue to check for errors in release builds,
    5. // but continue the build even when errors are found:
    6. abortOnError false
    7. }
    8. lintOptions {
    9. abortOnError false
    10. }

4. 参考文档

5. 附:

5.1 jenkins job 配置

jenkins-job-构建安卓app.pdf

5.2 app-demo 模板文件

app-demo.zip