分享

uniapp开发android原生插件(二):引入依赖、开发插件

 创始元灵6666 2022-10-19 发布于河北

一、前言

上一篇文章中说到android原生插件的创建过程,大致看一下插件的目录结构:
插件目录结构
在开发插件之前我们需要引入一些相关的依赖,依赖会从以下内容体现,依赖相关文件请参考:官方原生插件开发案例

注意uni-app插件目前仅支持Module扩展和Component扩展,以下开发的插件是Component扩展

二、开发步骤

2.1 引入相关依赖

  • 官方原生插件开发案例下的uniapp-v8-release.aar文件,复制到 /Plugin-Demo/app/libs 目录下
  • 修改myapplication目录下的build.gradle文件,文件内容如下(需要修改的地方有相应的标注):
  1. plugins {
  2. id 'com.android.library'
  3. }
  4. android {
  5. compileSdk 30
  6. defaultConfig {
  7. minSdk 21
  8. targetSdk 30
  9. versionCode 1
  10. versionName "1.0"
  11. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  12. consumerProguardFiles "consumer-rules.pro"
  13. }
  14. buildTypes {
  15. release {
  16. minifyEnabled false
  17. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  18. }
  19. }
  20. compileOptions {
  21. sourceCompatibility JavaVersion.VERSION_1_8
  22. targetCompatibility JavaVersion.VERSION_1_8
  23. }
  24. }
  25. // 此处需要修改
  26. repositories {
  27. flatDir {
  28. dirs 'libs'
  29. }
  30. }
  31. // 此处需要修改
  32. dependencies {
  33. compileOnly fileTree(dir: 'libs', include: ['*.jar'])
  34. compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])
  35. compileOnly "com.android.support:recyclerview-v7:28.0.0"
  36. compileOnly "com.android.support:support-v4:28.0.0"
  37. compileOnly "com.android.support:appcompat-v7:28.0.0"
  38. implementation 'com.alibaba:fastjson:1.1.46.android'
  39. implementation 'com.facebook.fresco:fresco:1.13.0'
  40. }

2.2 开发第一个插件

  1. package com.ali.myapplication;
  2. import android.content.Context;
  3. import android.graphics.Color;
  4. import android.widget.TextView;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import io.dcloud.feature.uniapp.UniSDKInstance;
  8. import io.dcloud.feature.uniapp.annotation.UniJSMethod;
  9. import io.dcloud.feature.uniapp.ui.action.AbsComponentData;
  10. import io.dcloud.feature.uniapp.ui.component.AbsVContainer;
  11. import io.dcloud.feature.uniapp.ui.component.UniComponent;
  12. import io.dcloud.feature.uniapp.ui.component.UniComponentProp;
  13. public class TestText extends UniComponent<TextView> {
  14. @Override
  15. protected TextView initComponentHostView(Context context) {
  16. TextView textView = new TextView(context);
  17. textView.setTextSize(20);
  18. textView.setTextColor(Color.BLACK);
  19. return textView;
  20. }
  21. // 属性
  22. @UniComponentProp(name = "tel")
  23. public void setTel(String telNumber) {
  24. getHostView().setText("tel: " + telNumber);
  25. Map<String, Object> params = new HashMap<>();
  26. Map<String, Object> number = new HashMap<>();
  27. number.put("tel", telNumber);
  28. //目前uni限制 参数需要放入到"detail"中 否则会被清理
  29. params.put("detail", number);
  30. fireEvent("onTel", params);
  31. }
  32. // 方法
  33. @UniJSMethod
  34. public void clearTel() {
  35. getHostView().setText("");
  36. }
  37. @Override
  38. public void onActivityResume() {
  39. super.onActivityResume();
  40. }
  41. @Override
  42. public void onActivityPause() {
  43. super.onActivityPause();
  44. }
  45. @Override
  46. public void onActivityDestroy() {
  47. super.onActivityDestroy();
  48. }
  49. public TestText(UniSDKInstance instance, AbsVContainer parent, int type, AbsComponentData componentData) {
  50. super(instance, parent, type, componentData);
  51. }
  52. public TestText(UniSDKInstance instance, AbsVContainer parent, AbsComponentData componentData) {
  53. super(instance, parent, componentData);
  54. }
  55. }

2.3 插件打包

插件打包

打包文件在 /Plugin-Demo/myapplication/build/outputs/aar 目录下:myapplication-release.aar

三、常见问题

3.1 错误一

  1. Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository 'flatDir' was added by build file 'myapplication\build.gradle'

Build was configured to prefer settings repositories over project repositories but repository 'flatDir'

解决方案:删除项目根目录下 settings.gradle 文件中的 dependencyResolutionManagement

3.2 问题二

  1. Execution failed for task ':myapplication:generateReleaseRFile'.
  2. > Could not resolve all files for configuration ':myapplication:releaseCompileClasspath'.
  3. > Could not find androidx.recyclerview:recyclerview:1.0.0.
  4. Searched in the following locations:
  5. - file:/G:/myproject/study/Plugin-Demo/myapplication/libs/recyclerview-1.0.0.jar
  6. - file:/G:/myproject/study/Plugin-Demo/myapplication/libs/recyclerview.jar
  7. Required by:

问题二

解决方案:在项目根目录的 build.gradle 文件中添加以下内容:

  1. allprojects {
  2. repositories {
  3. google()
  4. jcenter()
  5. }
  6. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多