【uniapp】Android离线精简打包步骤及方法

安卓离线打精简包根据官方文档也可以完成。以下记录的是我个人打包的步骤和方法,以防忘记。

以下方法仅仅是打出基础的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创建一个空项目,具体信息根据个人实际情况而定。大致如下图


创建项目.png
创建2.png
创建3.png
创建4.png

创建5.png

​ 以上应该没什么好说的,创建完项目,需要将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中的值

权限.png

然后做一下处理变成

    <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 小红色灯泡方法自动修复一下就好了。如下:


image.png

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>

以上配置完毕会有错误信息,先不用管。
配置完的完整形态如下:


配置am2.png
配置am3.png

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文件如下


build.gradle1.png

我直接贴出我使用的信息,有一些我也不懂(我不是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

image.png

其实uniapp项目根目录\unpackage\resources下的文件夹就是用DCloud的appid来命名的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容