UniApp使用最新版Android Studio本地离线打包全流程

看网上大部分教程都是老版的Android Studio,gradle大概在5.x,这次以最新的版本写一个本地离线打包基座全流程

出现报错可以直接拉到最后面查看常见问题,我觉得大部分问题也就在这里

创建项目

  1. 选择No Activity,点击next,写好项目名称,选择API24也就是安卓7.0,点击finish.

开发语言和Build configuration不要选成Kotlin了

2.创建好后,将项目从Android切换为Project

配置SDK

下载SDK

去该网址下载

放置相关SDK

在App目录下,新建libs文件夹,将如下的SDK复制到文件夹内

这里的是必须添加的,如果你需要其他SDK,你也可以添加进来

在build.gradle中添加资源引用

打开app目录下的build.gradle文件,在dependencies中添加以下依赖

gradle 复制代码
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation "com.squareup.okhttp3:okhttp:3.12.12"
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.facebook.fresco:fresco:2.5.0'
implementation "com.facebook.fresco:animated-gif:2.5.0"
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.2.83'
implementation 'androidx.webkit:webkit:1.3.0'

在android中添加以下配置

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

packagingOptions {
    jniLibs {
        useLegacyPackaging true
    }
}

添加好后记得点击Sync Now

创建Uniapp模版资源和离线key

正常创建默认模板即可,然后打开manifest.json文件,点击重新获取按钮获取AppId,然后进入 开发者中心,选择新创建的应用,点击应用名称进入到详情页面,然后点击Android云端证书创建证书,待证书创建完成后,下载证书,然后在app目录下新建cert文件夹,复制证书到该文件夹下。项目根目录下创建doc文件夹,创建cert.txt文件,回到后台,点击查看证书,复制到cert.txt文件中,点击查看密码,将密码也复制到cert.txt文件中。接着,点击到各平台信息,选择新增,已有的选项不用动,回到我们的cert.txt文件中,复制必填项后提交。最后点击创建离线key。

虽然MD5值不是必填,但是也请填上

应用配置

回到我们的安卓项目,打开app/src/main/AndroidManifest.xml文件,在application节点中创建meta-data节点

xml 复制代码
<meta-data
        android:name="dcloud_appkey"
        android:value="替换为自己申请的Appkey" />

还需添加其他节点,完整文件内容如下,照着抄即可

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.UniappDemo"
        tools:targetApi="31">
        <meta-data
            android:name="dcloud_appkey"
            android:value="替换为自己申请的Appkey" />

        <activity
            android:name="io.dcloud.PandoraEntry"
            android:configChanges="orientation|keyboardHidden|keyboard|navigation"
            android:exported="true"
            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>
            <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=" " />
            </intent-filter>
        </activity>
        <activity
            android:name="io.dcloud.PandoraEntryActivity"
            android:launchMode="singleTask"
            android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize|uiMode"
            android:hardwareAccelerated="true"
            android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"
            android:screenOrientation="user"
            android:theme="@style/DCloudTheme"
            android:windowSoftInputMode="adjustResize">
        </activity>

        <provider
            android:name="io.dcloud.common.util.DCloud_FileProvider"
            android:authorities="你的包名.dc.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/dcloud_file_provider" />
        </provider>
    </application>

</manifest>

打包配置

再次回到app目录下的build.gradle文件,在android中添加以下配置

gradle 复制代码
signingConfigs {
    config {
        keyAlias '你获取的appId'
        keyPassword '让你保存在cert.txt的证书密码'
        storeFile file('证书的相对路径') // 路径为相对路径
        storePassword '让你保存在cert.txt的证书密码'
        v1SigningEnabled true //兼容v1
        v2SigningEnabled true //兼容v2
    }
}

修改buildTypes的配置

gradle 复制代码
buildTypes {
    debug {
        signingConfig signingConfigs.config
    }
    release {
        signingConfig signingConfigs.config
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

别忘了Sync Now

资源配置

在app/src/main目录下创建assets文件夹,将SDK->assets->data文件夹拷贝到刚刚创建的assets文件夹下

修改dcloud_control.xml文件,将appid修改为你获取的,并且为hbuilder节点添加属性

xml 复制代码
<hbuilder debug="true" syncDebug="true">
<apps>
    <app appid="__UNI__E6B05B1" appver=""/>
</apps>
</hbuilder>

回到Hbuilder,点击发行->App-Android/IOS本地打包->生成本地打包App资源,编译导出成功后,你会在unpackage的resources文件夹下发现以你的appid命名的文件夹,复制这个文件夹,然后回到安卓项目,在assets目录下创建apps目录,把复制的文件夹粘贴到这个目录下

最后在项目根目录下的gradle.properties文件中添加如下内容

xml 复制代码
android.useAndroidX=true
android.enableJetifier=true

注意对比,不要添加重复属性

打包并运行基座

点这个大象,然后展开,选择assemble 编译完成后,app目录下会生成build目录,在这里找到打包好的基座

回到Hbuilder,在unpackage目录下创建debug目录,把打包好的基座复制到该目录下并命名为android_debug

插上安卓设备,点击运行->运行到手机或模拟器->运行到Android App基座,选择自定义基座,点击运行,等待编译成功

至此,本地离线打包全部完成!

后续会记录原生插件和uts插件的开发

常见问题

第一步时,会有人遇见gradle下不下来的问题,也就是这一步会出问题

这里给出两种解决方案:

  • 第一种 使用魔法

如果你有魔法,点击右上角Setting,搜索proxy,然后选择Manual proxy configuration->HTTP,在Host name填写127.0.0。1,Port number处填写你的魔法端口(我的是猫猫,如果你也是可以照着抄端口)

点击确定,打开魔法,你的所有包都会下的很流畅

这么设置之后会弹出一个登录窗口,不用理会,关闭就好

  • 第二种 使用腾讯源 去到这个目录下,将红框部分替换为这个地址,点击右上角的Sync Project即可安装成功
js 复制代码
mirrors.cloud.tencent.com/gradle

创建离线key时包名如何查找

app目录下的build.gradle文件中的namespace就是包名

相关推荐
拉不动的猪1 小时前
前端常见数组分析
前端·javascript·面试
小吕学编程1 小时前
ES练习册
java·前端·elasticsearch
Asthenia04121 小时前
Netty编解码器详解与实战
前端
袁煦丞1 小时前
每天省2小时!这个网盘神器让我告别云存储混乱(附内网穿透神操作)
前端·程序员·远程工作
一个专注写代码的程序媛2 小时前
vue组件间通信
前端·javascript·vue.js
一笑code2 小时前
美团社招一面
前端·javascript·vue.js
懒懒是个程序员3 小时前
layui时间范围
前端·javascript·layui
NoneCoder3 小时前
HTML响应式网页设计与跨平台适配
前端·html
凯哥19703 小时前
在 Uni-app 做的后台中使用 Howler.js 实现强大的音频播放功能
前端
烛阴3 小时前
面试必考!一招教你区分JavaScript静态函数和普通函数,快收藏!
前端·javascript