打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

一、前言

上一篇文章中说到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'

解决方案:删除项目根目录下 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. }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
导入一个AndroidStudio工程作为一个Library Module
AndroidStudio 导入HttpClient最简单的方法
[Android]腾讯Tinker热修复框架简单使用
不要在Android的Application对象中缓存数据!
Android平台第三方插件开发指导
HTML 5终于定稿,八年后我们再一次谈谈怎么改变世界 | 36氪
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服