uniApp 安卓离线打包超详细教程

6,821 阅读5分钟

一、简介

          时间:2020 - 11 - 2
          本文记录uniapp开发项目后   Android本地打包过程。 由于uniapp开发相关工具及版本 更新过快,本文仅做参考,详情请以官网为准。
           参考地址:[https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android](https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android)

1. AS版本

2.HBuilderX版本

          2.9.3

3.windows版本

二、安装Android Studio

1.下载

          下载地址:www.androiddevtools.cn/

2.安装

3.打开Android Studio 新建空项目

解释:

        Name   ->   项目名

        Package Name   ->   主要用于系统识别唯一应用的包名,包名必须唯一,一个包名只能代表一个应用,绝不允许两个或多个应用使用同样的包名,可以包含大、小写字母(A-Za-z)、数字(0-9)以及下划线(_),可以用点(英文句号)分隔,隔开的每一段都必须以字母开头。Package name 作为应用标志,涉及申请第三方平台账号,一般情况下不建议修改,包名一般设置反向域名,如:io.dcloud.HBuilder

         Java     ->    开发使用语言

         Minimum SDK   ->    程序最低兼容版本,在低于此版本的安卓机上程序无法正常运行;可以修改, 在build.gradle文件中修改。Minimum API Level建议选19及以上。

信息填完点Finish,

点击porject这就是刚刚我们新建的空白工程。如下图所示:

二、下载最新版SDK并配置AS工程

1.下载

注意:请下载与你的HBuilderX版本相对应版本的SDK。不然会出现下面这种问题

下载地址:[https://nativesupport.dcloud.net.cn/AppDocs/download/android](https://nativesupport.dcloud.net.cn/AppDocs/download/android)

下载完毕之后解压,进入SDK文件夹,进入libs文件下,如下图所示:

Android-SDK@2.9.3.80443_20201015    ->   SDK    ->   libs

将  **lib.5plus.base-release.aar **、**android-gif-drawable-release@1.2.17.aar**
、**uniapp-release.aar **和 **msa_mdid_1.0.13.aar **拷贝到 Android Studio新建的工程目录的app    ->  libs  目录下。
注意:自HBuilderX2.8.0开始,JS引擎默认从jscore改为V8,提升运算性能,离线sdk自HBuilderX2.8.1也将默认JS引擎切换到V8,新增uniapp-v8-release.aar(uniapp-v8-release.aar和uniapp-release.aar不能同时使用)。

2.配置build.gradle

        (1)在 app目录下的build.gradle 文件下 dependencies 里添加以下资源引用 然后点 Sync Now。如下图所示:

          app -> build.gradle

implementation	fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation	"com.android.support:support-v4:28.0.0"
implementation	"com.android.support:appcompat-v7:28.0.0"
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"
implementation	'com.github.bumptech.glide:glide:4.9.0'
implementation	 'com.alibaba:fastjson:1.1.46.android'

        (2)在 app 目录下的build.gradle 文件下 android里添加 aaptOptions 配置,然后点 Sync Now。如下图所示:

          app -> build.gradle

aaptOptions {
    additionalParameters '--auto-add-overlay' 
    ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}

        (3)应用配置

           配置应用版本号

          versionCode为应用的版本号(整数值),用于各应用市场的升级判断,建议与HBuildX   -> manifest.json  中    version   ->   code  值一致。

          versionName为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与 HBuildX  ->  manifest.json 中  version  ->  name  值一致。

          applicationId  为应用的包名,一般设置为反向域名,不建议修改。

          建议将 targetSdkVersion 设置为 25 或以上。

          App离线 SDK minSdkVersion 最低支持 19,小于19在部分4.4以下机型上将无法正常使用。

          配置完毕后点Sync Now。如下图所示:

完整的 build.gradle 配置可如下:
apply plugin:	 'com.android.application' 

android {    	
    compileSdkVersion  30    	
    buildToolsVersion  "30.0.2"    

    defaultConfig {        	
        applicationId  "com.example.neumorphism"        	
        minSdkVersion  19       		 
        targetSdkVersion  30        	
        versionCode  20201102        	
        versionName  "1.0.0"        	
        multiDexEnabled  true    	
    }    

    aaptOptions {        	
        additionalParameters  '--auto-add-overlay'        	
        ignoreAssetsPattern  "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"    	
    }    

    buildTypes {        	
        release {            	
            minifyEnabled  false            	
            proguardFiles 	 
            getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 
         }    	
    }	
}	

dependencies {    	
    implementation  'androidx.appcompat:appcompat:1.2.0'
    implementation  'androidx.constraintlayout:constraintlayout:2.0.1'   		
    testImplementation  'junit:junit:4.12'    	
    androidTestImplementation  'androidx.test.ext:junit:1.1.2'    	
    androidTestImplementation  'androidx.test.espresso:espresso-core:3.3.0'    	
    implementation  fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: []) 
    implementation  "com.android.support:support-v4:28.0.0"    	
    implementation  "com.android.support:appcompat-v7:28.0.0"    	
    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"    	
    implementation  'com.github.bumptech.glide:glide:4.9.0'    	
    implementation  'com.alibaba:fastjson:1.1.46.android'	
}

二、HBuildX本地打包,AS资源配置

1. 导出资源

打开 HBuilderX   ->  需要本地打包的 uniapp 项目   ->   manifest.json
获取AppID

配置 应用版本名称 和 应用版本号,和 Android Studio 配置相同。

选择    发行  ->   原生App-本地打包   ->   生成本地打包App资源

2. 创建资源文件夹

Android studio 默认项目没有 assets 文件夹,需手动创建,创建位置与 java 目录同级。

在  app  ->  src  ->  main 文件夹下创建 assets 文件夹。

在  assets 文件夹下创建 data 文件夹。
在  assets  文件夹下创建 apps文件夹。如下图所示:

3. 拷贝资源

打开下载的 SDK 文件,将 Android-SDK@2.9.3.80443_20201015 -> SDK -> assets -> data 路径下的所有文件复制到刚刚 Android Studio 工程创建的 assets -> data文件夹下。如下图所示:

将 HBuilderX 中导出的本地资源文件复制到刚刚 Android Studio 工程创建的
assets -> apps 文件夹下。如下图所示:

4. 资源配置

      (1)修改 dcloud_control.xml文件

         修改 dcloud_control.xml 中的 appid 为拷贝过来的 5+APP 的 id,确保 dcloud_control.xml 中的 appid 与 manifest.json 中的 id 与文件夹名一致,如下图所示:

       (2)配置应用名称

打开   app -> res -> main -> values -> strings.xml  文件,修改 “app_name” 字段值,该值为安装到手机上桌面显示的应用名称,建议与 manifest.json 中 name(基础配置中的应用名称)对应。如下图所示:

    (3)配置AndroidManifest.xml文件

      新建的项目默认会有一个 MainActivity 的节点,必须删掉!

      删除如下图所示节点:

      将以下节点添加到 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>

      (4)配置应用图标和启动图

        icon.png为应用的图标。

        push.png为推送消息的图标。

        splash.png为应用启动图。

        将 icon.png 、push.png 、splash.png 放置到drawable ,drawalbe-ldpi , drawablemdpi, drawable-hdpi , drawable-xhdpi ,drawable-xxhdpi 文件夹下。如下图所示。因为我的应用不涉及推送,所以没有push.png。
         不同文件夹下对应不同图片尺寸。
          详情可参考[https://blog.csdn.net/xuaho0907/article/details/72848520](https://blog.csdn.net/xuaho0907/article/details/72848520)

       修改 Androidmanifest.xml 中 application 节点的 icon 属性为 @drawable/icon。如下图所示:

         注意:splash.png在不同设备上显示效果不一样,为防止出现拉伸的状况,建议使用Android studio生成.9.png类型图片。
         详情可参考[https://ask.dcloud.net.cn/article/35527](https://ask.dcloud.net.cn/article/35527)

五、调试打包

1. 调试

       我使用的是Android Studio自带的AVD模拟器调试 (很耗内存,一般建议直接usb连接安卓手机调试)

        详情请参blog.csdn.net/weixin_4498…

等待Build

看到APP成功跑起来。接下来就可以打包成APK了。

2. apk打包

       使用自己的证书打包,没有签名的可以先创建,
        详情请参考[https://blog.csdn.net/mynamelijun/article/details/72780825](https://blog.csdn.net/mynamelijun/article/details/72780825)。

点击 Finish 等待打包

以上apk打包完成。uniapp项目离线打包完成。
提示:最后我们可以配置下打包后的apk名称,在 app -> build.gradle 文件的 android里加上以下配置,点Sync Now
android.applicationVariants.all {
    variant ->        
        variant.outputs.all { 
               outputFileName = "app_Neumorphism_${buildType.name}_v${defaultConfig.versionName}-${defaultConfig.versionCode}.apk"
        }
}
如图所示:

再次打包

可以看到生成的apk名称就变成 我们 应用的名称+打包方式的名称+版本号+版本名称了。

结语:

        感谢您的观看。使用 uniapp 安卓离线打包至此结束。本文仅用作个人记录。请 uniapp 官网为准。