安卓离线打精简包根据官方文档也可以完成。以下记录的是我个人打包的步骤和方法,以防忘记。
以下方法仅仅是打出基础的apk程序包,如果你们在项目中有特别的功能依赖还需要另行配置。
使用版本
- HBiulderX 版本为 2.5.1.20200103
- SDK 版本为:2.5.1.72759_20200104
- 安卓打包工具及系统信息如下
Android Studio 3.2
Build #AI-181.5540.7.32.5014246, built on September 18, 2018
JRE: 1.8.0_152-release-1136-b06 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
打包步骤
1:生成本地App资源包
使用HBuilderX 生成本地app的资源包,当然项目已经写完,需要打包的时候,相信大家都会,以防有不知道的特记录以下步骤
HBuilderX 发行 --> 原生App本地打包 --> 生成本地打包App资源
然后等待编译完成,资源文件在 uniapp项目根目录\unpackage\resources
目录下
2:创建安卓工程
使用AS创建一个空项目,具体信息根据个人实际情况而定。大致如下图
以上应该没什么好说的,创建完项目,需要将
src\androidTest\java\[项目包名]
、src\main\java\[项目包名]\
、src\test\java\[项目包名]
下的.java文件删除,我试过不删除,打包的时候会由于运行test报错。所以我索性就都删除了。
2.1:配置AndroidManifest.xml
2.1.1:修改名称和版本
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="【项目包名,一般不用改】"
android:versionName="@string/version_name"
android:versionCode="@string/version_code">
其中android:versionName
为版本号。 android:versionCode
为没有格式的版本号。
@string/version_name
是我在src\main\res\values\strings.xml
中定义的两个值,具体如下
<resources>
<string name="app_name">测试</string>
<string name="version_name">1.0.0</string>
<string name="version_code">100</string>
</resources>
2.1.2: 配置权限
我的办法是直接利用BuilderX项目中的安卓权限复制粘贴,修改以下格式的办法,如下:
打开BuilderX项目中manifest.json
源码视图,复制节点:app-plus/distribute/android/permissions
中的值
然后做一下处理变成
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
然后粘贴到安卓项目中的AndroidManifest.xml里。AS 会有错误提示,使用AS 小红色灯泡方法自动修复一下就好了。如下:
2.1.3: 替换application节点
删除或者注释掉原application节点,然后将如下信息替换进去
<!--需要替换为DCloude的启动项-->
<!--
android:icon="@drawable/icon" 为apk图标文件,名字为icon.png
路径在\app\src\main\res\drawable中
-->
<application
android:name="io.dcloud.application.DCloudApplication"
android:allowClearUserData="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:largeHeap="true"
>
<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>
<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>
</application>
以上配置完毕会有错误信息,先不用管。
配置完的完整形态如下:
2.2: 引入基本SDK文件
将下载下来的DCloud的SDK解压后拷贝路径Android-SDK@2.5.1.72759_20200104\SDK\libs
中
android-gif-drawable-release@1.2.17.aar
lib.5plus.base-release.aar
uniapp-release.aar
文件复制到安卓项目路径\app\libs
下
当然个人可以根据自己实际需要的功能及依赖引入自己需要的sdk文件。具体参考SDK下的Feature-Android.xls内来配置和引用
2.3: 放入自己app的icon文件
将icon.png
文件放入安卓项目路径\app\src\main\res\drawable
中。
2.4: 配置build.gragrdle
文件
刚创建的gradle文件如下
我直接贴出我使用的信息,有一些我也不懂(我不是Android开发工程师つ﹏⊂)所以可以根据个人实际情况做修改
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "你的包名"
minSdkVersion 17 //这个地方不要低于17
targetSdkVersion 28
versionCode 1
versionName "1.0"
multiDexEnabled true
ndk {
abiFilters 'arm64-v8a','armeabi-v7a','x86'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
/*代码开始*/
aaptOptions {
additionalParameters '--auto-add-overlay'
//noCompress 'foo', 'bar'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
/*代码结束*/
}
repositories{
flatDir{
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation fileTree(include: ['*.aar'], dir: 'libs')
/*uniapp所需库-----------------------开始*/
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation "com.facebook.fresco:animated-gif:1.13.0"
/*uniapp所需库-----------------------结束*/
// 基座需要,必须添加
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.1.46.android'
}
修改完gragrdle
文件记得 点一下Sync Now
细心点会在AS上注意到的。嘿嘿
2.5: 开始引入HBuilderX打包出来的App资源文件
2.5.1:引入必要的资源文件
首先将Android-SDK@2.5.1.72759_20200104\SDK\assets
文件夹复制到安卓项目跟目录\app\src\main
下,修改安卓项目跟目录\app\src\main\assets\data\dcloud_control.xml
文件
<app appid="DCloud的appid" appver="@string/version_name"/>
根据自己实际情况修改安卓项目跟目录\app\src\main\assets\data\dcloud_properties.xml
文件。我是把自己觉得没用的给注释掉了。
2.5. 2:放入uniapp打包后的资源文件
将 uniapp项目根目录\unpackage\resources
目录下文件夹复制到安卓项目跟目录\app\src\main\assets\apps\
下,如没有apps文件夹,自己创建一个。
注意:是apps不是app,我曾经就是因为少一个s导致安装到手机上白屏
基本按照以上步骤做完,就可以编译打包了。
番外
如何知道自己的DCloud的appid
其实uniapp项目根目录\unpackage\resources
下的文件夹就是用DCloud的appid来命名的。