【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来命名的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容