Uniapp、uniappx笔记
App平台
云端打包
Uniappx原生SDK
android
studio原生工程配置https://doc.dcloud.net.cn/uni-app-x/native/use/android.html
配置uts插件
教程 https://doc.dcloud.net.cn/uni-app-x/native/use/androiduts.html
uts插件资源位于unpackage/resource/app-android/uni_modules,uts插件指前端封装的uni_modules插件;android
uts插件指根据编译后的uts插件生成的安卓原生模块(需要按规则合并到android
studi新建的android library)
{width="5.7625in"
height="6.011805555555555in"}
上图官方文档,下两图我实际工程
{width="4.995833333333334in"
height="9.686805555555555in"}
上左图hello
uvue是HbuilderX新建的uniappx工程,uts-nativepage是新建的uts插件。整个工程可以编译生成本地资源,如图中文字所示,用于android
studio开发。每一个UTS插件对应android项目中的一个 lib module.
上右图uniapp3是android studio工程(空activity,但我用带导航的activity)
,app是父模块,子模块有uniappx(建议改名hello uvue,用于合并上左图hello
uvue工程)、uts-nativepage(用于合并上左图hello
uvue/uni_modules/uts-nativepage插件),模块依赖关系如下:
app依赖所有子模块,uniappx依赖uts-nativepage
上右图android studio工程uniapp3的库依赖关系如下:
uniappx依赖Uniappx/libs(其中包含了aar库,都是uniappx的SDK安卓版),uniappx依赖uts-nativepage/lib(其中包含了uts-nativepage所依赖的jar、so库)
Uniappx依赖uts-nativepage/lib,因为uniapp调用了uts-nativepage
uts-nativepage依赖Uniappx/lib,因为SDK是公共库,uts-nativepage也用了
uniappx的SDK放在Uniappx/lib因为其合并了hello uvue,比较好理解
剩下的就是三个工程的build.gradle文件的配置,androidmainfest.xml配置,还有复制资源资源
混编插件在Android studio打包:.so 分为不同平台,比如libs\arm64-v8a
libs\armeabi-v7a libs\x86 libs\x86_64 ,然后设置
E:\workspace\android\Uniapp3\uts-nativepage\build.gradle
android {
sourceSets {
main {
jniLibs.srcDirs = ['./libs']
}
}
Uts插件
https://doc.dcloud.net.cn/uni-app-x/native/use/androiduts.html
每一个UTS插件对应android项目中的一个 lib module.
第二步 集成原生代码
Kotlin/Java语言中,存在包名
的概念,类似swift的命名空间。为了让我们的原生代码可以被UTS使用,我们需要确保原生代码的包名是正确的:
大多数情况下,我们建议混编代码的包名与UTS插件默认包名保持一致,这样在UTS调用原生代码时,可以省去手动引入包名的步骤。
UTS是Kotlin语言的上游语言。所有Kotlin代码中的:类、对象、函数、变量,均可以在uts中直接使用。但反过来,虽然可以在Kotlin中调用UTS代码,但这是不安全的
以hello
uts/uni_modules/uts-nativepage为例,utssdk/app-android/NativeLib.kt包名package
uts.sdk.modules.utsDemoMem
与uts插件的utssdk\app-android\AndroidManifest.xml的package="io.dcloud.uni_modules.utsNativepage">
不一样,
uts引入kotlin就需要import KotlinObject from 'xxx.xxx.KotlinObject';
反过来kotlin引入uts需要import io.dcloud.uts.console // kt或java代码
如果需要在原生环境和UTS环境/uvue环境中互传数据,建议转换为标准内置对象实现后再进行传递。
hello uts混编实例调用流程
E:/workspace/uni/hello uts/pages/SystemAPI/SystemAPI.vue uniapp优先调用
E:/workspace/uni/hello uts/pages/SystemAPI/SystemAPI.uvue uniappx调用
import { gotoDemoActivity,sayHelloFromJar,sayHelloFromSO } from
"@/uni_modules/uts-nativepage";
...
methods: {
testNativeSO() {
let ret = [sayHelloFromSO]{.mark}();
--》
E:/workspace/uni/hello
uts/uni_modules/uts-nativepage/utssdk/app-android/index.uts
export function [sayHelloFromSO]{.mark}():string {
let nativeLib = new NativeLib()
return nativeLib.[stringFromJNI]{.mark}()
-》
E:/workspace/uni/hello
uts/uni_modules/uts-nativepage/utssdk/app-android/NativeLib.kt
external fun [stringFromJNI]{.mark}(): String
companion object {
// Used to load the 'nativelib' library on application startup.
init {
System.loadLibrary("[nativelib]{.mark}")
}
-》
E:/workspace/uni/hello
uvue/uni_modules/uts-nativepage/utssdk/app-android/libs/x86_64/[libnativelib]{.mark}.so
我是黑体字
我是微软雅黑
我是华文彩云
我是红色
我是绿色
我是蓝色
我是尺寸
我是黑体,绿色,尺寸为5
背景色yellow |
import sys
ssl._create_default_https_context = ssl._create_unverified_contextrootPath = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(rootPath,"cnblogs.json"),"rb") as f:config = json.loads(f.read())
你要改色的文字
$\textcolor{red}{这里输入你要改变颜色的文字}$
$\textcolor{Yellow}{Yellow}$