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就是包名

相关推荐
污斑兔2 分钟前
VMWare清理后,残留服务删除方案详解
前端
gong1917231696712 分钟前
非受控组件在React中的使用场景有哪些?
前端·javascript·react.js
TE-茶叶蛋13 分钟前
React 常见的陷阱之(如异步访问事件对象)
前端·javascript·react.js
zhangpeng45554794027 分钟前
C++编程起步项目
开发语言·前端·c++
秋田君1 小时前
构建安全的Vue前后端分离架构:利用长Token与短Token实现单点登录(SSO)策略
前端·javascript·vue.js·elementui·前端框架·mock·sso单点登录客户端
GISer_Jing1 小时前
Canvas &SVG &BpmnJS编辑器中Canvas与SVG职能详解
前端·javascript·编辑器
2402_881319301 小时前
web开发全过程总结
前端·javascript·vue.js
一峰说1 小时前
power BI 倒计时+插件HTML Content,实现更新倒计时看板!
前端·html
2301_816169611 小时前
vue路由小案例
前端·javascript·vue.js
colourmind1 小时前
vue3前端后端地址可配置方案
前端·javascript·vue.js