uniapp原生插件开发 【修复】遇到的各种问题

1,255 阅读3分钟

uniapp原生插件开发

App离线打包

原生插件开发

tip: 没有学过安卓开发和java

Could not find compile target android-29 for modules

Could not find compile target android-29 for modules :uniplugin_component, :uniplugin_module, :uniplugin_richalert

image.png

其中29是 android API的级别,选择菜单 Tools->SDK Manager,下载对应API Level的sdk,下载完成后,选择菜单File->Sync Project Width Gradle Files, 来刷新项目,错误消失。

image.png**

未配置appkey或配置错误

没有生成插件aar文件的脚本

Gradle Scripts中没有assembleRelease问题

  • 在 Settings 中,选择 Experimental(有选项的就操作)
    • 取消勾选“Do not build Gradle task list during Gradle sync”。
    • 取消勾选“Only include test tasks in the Gradle task list generated during Gradle sync”。
    • 勾选“Configure all Gradle tasks during Gradle Sync (this can make Gradle Sync slower)”。
  • 然后点击 File,选择 Sync Project with Gradle Files

导入aar和jar包

  • 将 AAR 文件复制到项目的 libs 目录下。
  • 配置 build.gradle 文件:在项目的 build.gradle 文件中添加以下代码以支持 AAR 文件
repositories { flatDir { dirs 'libs' } }
dependencies { 
    implementation fileTree(dir: 'libs', include: ['*.jar', '*aar'])
    // 其他位置
    implementation fileTree(dir: '../app/libs', include: ['xx.aar'])
}
scope作用
compileOnly由java插件提供,曾短暂的叫provided,后续版本已经改成了compileOnly,适用于编译期需要而不需要打包的情况
runtimeOnly由 java 插件提供,只在运行期有效,编译时不需要,比如mysql 驱动包。,取代老版本中被移除的 runtime
implementation由 java 插件提供,针对源码[src/main 目录] ,在编译、运行时都有效,取代老版本中被移除的 compile
testCompileOnly由 java 插件提供,用于编译测试的依赖项,运行时不需要
testRuntimeOnly由 java 插件提供,只在测试运行时需要,而不是在测试编译时需要,取代老版本中被移除的testRuntime
testImplementation由 java 插件提供,针对测试代码[src/test 目录] 取代老版本中被移除的testCompile
providedCompilewar 插件提供支持,编译、测试阶段代码需要依赖此类jar 包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war 包中了;例如servlet-api.jar、jsp-api.jar
compile编译范围依赖在所有的 classpath 中可用,同时它们也会被打包。在gradle 7.0 已经移除
runtimeruntime 依赖在运行和测试系统的时候需要,在编译的时候不需要,比如mysql 驱动包。在 gradle 7.0 已经移除
apijava-library 插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。取代老版本中被移除的 compile
compileOnlyApijava-library 插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要。

libs目录没有显示

选择为 project

image.png

调用Kotlin中的companion object

建议用Kotlin开发

image.png

获取上下文对象 Context

import io.dcloud.application.DCLoudApplicationImpl;
this.mWXSDKInstance.getContext();// Activity,Context
mUniSDKInstance.getContext();// Activity,Context
mUniSDKInstance.getOriginalContext();// Context
DCLoudApplicationImpl.self().getContext(); // Context

新建 Library Module

image.png

image.png

image.png

image.png

image.png

然后复制原来uniplugin_module的build.gradle内容到新模块的build.gradle

离线打包问题

打包时未添加xxx模块

参考官方文档:模块及三方SDK配置

多个aar,jar 打包到一个aar 中

如何把多个aar,jar 打包到一个aar 中(含踩坑记录)_android jar包可以打到aar中吗-CSDN博客

fat-aar-android/README_CN.md at master · kezong/fat-aar-android (github.com)

Plugin [id: 'com.android.application', version: 'x.x.x', apply: false] was not found in any of the following sources

D:\gradle\gradle\gradle.properties
C:\Users\用户.gradle\gradle.properties
项目gradle.properties 注释掉代理: image.png

Google Play requires that apps target API level 33 or higher

添加注释

//noinspection ExpiredTargetSdkVersion
targetSdkVersion 28