前语:
各位同学大家好,最近帮别人打包了一个 uni 的项目编译成apk 所以觉得必要共享下。
上效果图
原始工程
这种uni 原始的工程我们直接
这样我们就可以工作到我们的模拟器或许真机上面去
手动打包
开发环境
- Android Studio 下载地址:Android Studio官网ORAndroid Studio中文社区
- HBuilderX
- App离线SDK下载:最新android途径SDK下载 3.1.10版别起需求恳求Appkey,详细请点击链接
SDK目录说明
|-- HBuilder-Hello App离线打包演示运用
|-- HBuilder-Integrate-AS 集成uni-app的最简示例
|-- SDK SDK库文件目录
|-- Feature-Android.xls Android途径各扩展Feature API对应的详细配备
|-- Readme.txt 版别说明文件及留心事项
|-- UniPlugin-Hello-AS uni原生插件开发示例
android 离线sdk
百度网盘 提取码: 7rfu 我们找到这个 HBuilder-Integrate-AS 导入进去
配备工程
- 基础库配备 将lib.5plus.base-release.aar、android-gif-drawable-release@1.2.23.aar、uniapp-v8-release.aar、oaid_sdk_1.0.25.aar和breakpad-build-release.aar拷贝到libs目录下 留心:HBuilder X 3.5.0及以上版别新增库breakpad-build-release.aar
在build.gradle中添加资源引用
留心:HBuilderX3.2.5版别之后适配了AndroidX。 AndroidX版别需添加如下资源
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.aar'], dir: 'libs')
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'
拷贝代码
uni-app配备时需求在build.gradle中添加aaptOptions配备
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
拷贝代码
**留心:更新SDK时需求一起更新aar/jar文件和build.gradle配备**
2. 运用配备
* 配备Appkey
**3.1.10版别起需求恳求 Appkey,恳求请[参看](https://nativesupport.dcloud.net.cn/AppDocs/usesdk/appkey)**
翻开Androidmanifest.xml, 导航到Application节点,创建meta-data节点,name为dcloud\_appkey,value为恳求的AppKey如下:
<!---->
<application
...>
<meta-data
android:name="dcloud_appkey"
android:value="替换为自己恳求的Appkey" />
拷贝代码
* 配备运用版别号
![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a9eedcd098c244548982b8d5ea34c696~tplv-k3u1fbpfcp-zoom-1.image)
versionCode为运用的版别号(整数值),用于各运用商场的晋级判断,建议与manifest.json中version -> code值一起
versionName为运用的版别称谓(字符串),在体系运用管理程序中闪现的版别号,建议与manifest.json中version -> name值一起。
applicationId为运用的包名,一般设置为反向域名,不建议批改。
建议将targetSdkVersion设置为25或以上。
App离线SDK minSdkVersion最低支撑21,小于21在部分5.0以下机型上将无法正常运用。
完好版build.gradle可参看如下内容。
<!---->
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
multiDexEnabled true
ndk {
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.alibaba:fastjson:1.2.83'
implementation 'androidx.webkit:webkit:1.3.0'
}
拷贝代码
**留心:假如需求集成的第三方sdk存在so库文件,只需添加armeabi-v7a、arm64-v8a、x86三个文件夹即可,否则会导致在部分手机上无法工作。**
* 配备运用称谓
翻开app-> src -> main -> res -> values -> strings.xml文件,批改“app\_name”字段值,该值为装置到手机上桌面闪现的运用称谓,建议与manifest.json中name(基础配备中的运用称谓)对应。
* 配备运用发起页及provider节点
将下述activity信息添加到Androidmanifest.xml的application节点中
**留心:新建的项目默许会有一个MainActivity的节点,有必要删掉!**
**留心:为适配折叠屏,需求在PandoraEntryActivity的android:configChanges特色中追加“smallestScreenSize|screenLayout|screenSize”,参看如下配备。**
**留心:为适配暗黑方式,需求在PandoraEntryActivity的android:configChanges特色中追加“uiMode”,参看如下配备。**
<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>
<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信息到Androidmanifest.xml的application节点中
**留心:3.3.7及以上版别,可以不添加**
<!--provider节点有必要添加-->
<provider
android:name="io.dcloud.common.util.DCloud_FileProvider"
android:authorities="${apk.applicationId}.dc.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/dcloud_file_provider" />
</provider>
拷贝代码
**留心:\${apk.applicationId} 有必要替换成当时运用的包名**
假如集成离线SDK时需求重写application,有必要继承自DCloudApplication,否则会导致SDK中事务逻辑无法正常工作。
将对应的application配备到Androidmanifest.xml中(如下),并添加tools:replace="android:name"以防呈现抵触。
<application
android:name="io.dcloud.test.TestApplication"
android:icon="@drawable/icon"
android:label="@string/app_name"
tools:replace="android:name">
</application>
拷贝代码
* 配备运用图标和发起界面
* 图标称谓
icon.png为运用的图标。
push.png为推送音讯的图标。
splash.png为运用发起页的图标。
将icon.png、push.png、splash.png放置到drawable,drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi文件夹下,不同文件夹下对应不同图片尺寸,可参看[文档](https://blog.csdn.net/xuaho0907/article/details/72848520)
批改Androidmanifest.xml中application节点的icon特色为@drawable/icon。如下图: 留心:splash.png在不同设备上闪现效果不一样,为防止呈现拉伸的情况,建议运用Android studio生成.9.png类型图片,可参看文档 3. 资源配备 Android studio默许项目没有assets文件夹,需手动创建,创建方位与java目录同级。 * 创建data文件夹并拷贝资源 将SDK->assets->data文件夹拷贝到刚刚创建的assets文件夹下,如下图: 留心:SDK晋级时,data下资源需求一起更新。 * 创建apps文件夹并拷贝资源 将HBuilderX中的项目导出,将导出的资源拷贝到assets->apps下,如下图所示: 导出app资源 * 批改dcloud_control.xml文件 批改dcloud_control.xml中的appid为拷贝过来的uni-app的id,保证dcloud_control.xml中的appid与manifest.json中的id与文件夹名一起,如下图所示: 生成自定义基座,需求在根节点下添加debug=”true”和syncDebug=”true”,如下图:
自定义基座支撑热更新需求将debug-server-release.aar打入apk中,生成正式包时可以删去。
[详细步骤可参看链接](https://ask.dcloud.net.cn/article/35482)
4. 怎样配备暗黑方式 在AndroidManifest.xml中添加: “`
```
拷贝代码
其间可用的方式分别为`light`、`dark`、`auto`, 此设置会影响发起时的默许方式,别的在工作时可运用`plus.nativeUI.setUIStyle`动态批改主题方式。
**留心`PandoraEntryActivity`的`android:configChanges`配备有必要包括uiMode。**
5. 其他配备
AndroidX 配备
需求在项目根目录下的gradle.properties文件中添加如下内容
android.useAndroidX=true android.enableJetifier=true
拷贝代码
工作
联接手机,点击按钮,工作即可。
完好工程截图
dcloud_appkey 换成自己的
appid 换成自己的
怎样获取我们 appkey
我们在uni 官方开发者后台 上传我们jks 前面里面的 md5 sha1 sha256 信息
履行这个 指令就可以获取了
keytool -list -v -keystore xxx.jks
然后在 开发者后台找到这一栏
把这儿拿到的key 配备上面博客说的当地 然后包名批改跟开发者后台一起
签名也要用我们上传的md5 信息的那个jks
终究打包就可以了
终究总结:
终究我们发现uni 打包成apk能工作是运用webview js做桥接 和recat native 有异曲同工之妙 这种跨途径的项目打包终究都不能绕开长途 虽然生跨途径实则是借鸡生蛋 安卓终究是经过android studio 变成apk iOS 端则是经过xcode编译成ipa 终究呢 希望我都文章能帮助到各位同学工作和学习 假如你觉得文章还不错费事给我三连 关注点赞和转发 谢谢