96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

uniapp图片压缩插件-如何破解uniapp写的应用

原创:找图网 2023-05-03 05:47:33
  • uniapp 解决ios微信分享图片 不显示问题

  • 问题:图片显示要小于20kb,图片过大造成,所以压缩图片即可

    参考网址:

  • 如何破解uniapp写的应用

  • 最近uniapp 开发移动app项目遇到一个棘手问题,我想实现 TCPScoket 通信。我们知道 uniapp 开发基本用的是一些前端框架(如:vue, mpvue等)和一些 uni 自身 api。要想 uniapp 使用 Android 原生代码有以下三种常用方法:

    一: 使用 () 调用安卓的类进行原生代码编写,但是经测试效果很不理想,速度很慢!

    二:开发原生 Android 插件,运行速度快,但需要一定的安卓开发经验,难度较高。

    三:购买其他开发者开发的原生插件,但是一般价格不低。

    综上所述,我们必须学会自己开发原生插件!

    二、前期准备

    1、Android Studio 开发工具。 下载地址:

    安装教程:

    2、离线SDK下载(下载最新版)。 下载地址:

    3、保证 HbuilderX 也是最新版

    4、签名证书。 生成方法:

    三、创建一个 Uniapp 案例 (TCP-Plugin)

    1、 开发者中心创建一个应用:

    2、 点击应用名称进入应用,选择 离线打包Key管理 ,输入如下信息:

    签名证书获取:

    3、 点击保存会生成 appkey,后面要用到:4、 启动 HbuilderX,左下角登录自己的账户,新建一个和刚刚同名的项目的默认模板项目,查看 AppID 是否云端 APPID 对应:

    以上 uniapp demo 算是创建完成!

    四、Android 原生插件开发

    一、导入已下载好的离线SDK中的原生插件开发框架项目,UniPlugin-Hello-AS

    二、切换成 project模式, 项目结构如下:

    三、把我们刚才申请的appkey填写到 app/src/main/ 中,因为开发的是安卓,所以appkey填安卓的:

    四、把我们的签名证书放到app目录下,博主的签名证书名叫

    五、配置签名证书,在 app/ 的 signingConfigs 选项中:

    六、右键 UniPlugin-Hello-AS,创建 Module

    七、填写插件模块信息:

    八、配置 TCP-Socket/,复制官方案例 uniplugin_module/

    apply plugin: ''

    android {

    compileSdkVersion 29

    defaultConfig {

    minSdkVersion 16

    targetSdkVersion 28

    versionCode 1

    versionName "1.0"

    testInstrumentationRunner ''

    }

    buildTypes {

    release {

    minifyEnabled false

    proguardFiles getDefaultProguardFile(''), ''

    }

    }

    }

    repositories {

    flatDir {

    dirs 'libs'

    }

    }

    dependencies {

    compileOnly fileTree(dir: 'libs', include: ['*.jar'])

    compileOnly fileTree(dir: '../app/libs', include: [''])

    compileOnly ':recyclerview:1.0.0'

    compileOnly ':legacy-support-v4:1.0.0'

    compileOnly ':appcompat:1.0.0'

    implementation ':fastjson:1.1.'

    implementation ':fresco:1.13.0'

    /*implementation ':appcompat-v7:28.0.0'

    testImplementation 'junit:junit:4.12'

    androidTestImplementation ':runner:1.0.2'

    androidTestImplementation ':espresso-core:3.0.2'*/

    }

    九、删除不必要的官方案例,让项目更加简洁(可选):

    十、在TCP-Socket 模块下的 com/example/tcp/socket 创建类TcpModule

    十一、TCP Scocket 通信功能实现,代码如下:

    package ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    public class TcpModule extends UniModule {

    int port = 6666;

    Socket socket = null;

    OutputStreamWriter outputStream = null;

    InputStreamReader inputStream = null;

    @UniJSMethod

    public void send(final JSONObject json, final UniJSCallback callback) {

    new Thread(new Runnable() {

    @Override

    public void run() {

    String ip = ("ip");

    String userId = ("code");

    JSONObject res = new JSONObject();

    // 建立与服务器的连接

    try {

    socket = new Socket(ip, port);

    (1500);

    //建立连接后获取输入输出流

    outputStream = new OutputStreamWriter(());

    inputStream = new InputStreamReader(());

    } catch (Exception e) {

    try {

    ();

    } catch (IOException ioException) {

    ();

    }

    e.printStackTrace();

    ("code", 400);

    ("data", "系统异常, 请重启APP!");

    (res);

    }

    BufferedReader socketReader = new BufferedReader((inputStream));

    BufferedWriter bufferedWriter = new BufferedWriter(outputStream);

    PrintWriter socketWriter = new PrintWriter(bufferedWriter, true);

    (userId);

    try {

    String s = ();

    ("code", 200);

    ("data", s);

    // 这里关闭连接, 不然回调以后,程序就不执行了,不能再 finally 里面关闭连接

    ();

    (res);

    } catch (IOException e) {

    ("code", 400);

    ("data", "系统异常, 请重启APP!");

    (res);

    }

    }

    }).start();

    }

    }

    注意:Android4.0 以后不允许在主线程进行网络连接,否则会出现 。因此,必须另起一个线程进行网络连接方面的操作。

    十二、注册插件,在 app/src/main/assets/dcloud_ 文件中写入,如下:

    {

    "nativePlugins": [

    {

    "plugins": [

    {

    "type": "module",

    "name": "TCP-Socket",

    "class": ""

    }

    ]

    }

    ]

    }

    五、HbuilderX 生成本地打包 TCP-Plugin

    1、引入原生插件方式如下:

    const TCP = ("TCP-Socket");

    代码编写如下:

    <template>

    <view class="content">

    <image class="logo" src="/static/"></image>

    <view class="text-area">

    <text class="title">{{title}}</text>

    </view>

    <view>

    <button @click="clickBtn">点击发送消息</button>

    </view>

    </view>

    </template>

    <script>

    const TCP = ("TCP-Socket");

    export default {

    data() {

    return {

    title: 'TCP-Socket 插件测试'

    }

    },

    onLoad() {

    },

    methods: {

    clickBtn(){

    ({

    ip: '192.168.0.100', // 服务器ip

    code: 'd92863370904331f8a19cc116719bcd1' // 需要发送的数据

    }, e => {

    // 回调函数

    ({

    title: '响应数据:' + (e),

    icon: 'none'

    });

    })

    }

    }

    }

    </script>

    <style>

    (...省略)

    </style>

    2、HbuilderX 生成本地打包资源:

    六、离线打包apk并进行真机调试

    1、把生成的本地打包资源复制到 UniPlugin-Hello-AS 项目的 app/src/main/assets/apps 目录下:

    2、配置 appid,在 UniPlugin-Hello-AS 项目的 app/src/main/assets/data/dcloud_ 中配置:

    3、在 UniPlugin-Hello-AS 项目的 app/ 中对 TCP-Socket 插件引用:

    4、测试,手机或者虚拟设备连接以后,点击运行进行测试:

    七、打包生成原生插件 aar

    八、HbuilderX 引入TCP-Socket 打包的 aar 插件:

    1、目录结构以及 编写如下:

    2、 选择本地插件:

    九、制作自定义调试基座

    打包自定义基座成功如下:

    十、HbuilderX 真机调试测试插件

    1、选择自定义调试基座:

    注意:如果出现已经制作自定义调试基座,但是没有运行基座选择这一选项的情况。请重新进行自定义基座打包,直到出现运行基座选择为止!

    2、选择运行到 Android App 基座进行真机调试:

    测试成功!

    原生插件开发调试打包全部完成!

    十一、开发期间遇到的问题:

    1、 [JS Framework] 当前运行的基座不包含原生插件[xxxx],请在manifest中配置该插件,重新制作包括该原生插件的自定义运行基座。

    问题分析:

    1、 配置编写错误 (仔细进行对照).

    2、 是否在manifest中配置 (这种睿智操作一般不会犯)

    3、 原生插件是否使用自定义基座 (大部分是这个原因)

    4、 自己开发原生插件是否有错误,未成功打包到基座 (原因是这个的概率很小,因为在 Android Studio 离线打包的时候我们调试通过了,说明插件没有问题。)

    2、Android Studio 问题:Gradle task list not built during the task list can impact Gradlesync performance on large projects.

    解决方法如下:

    完结~~, 撒花~~

  • android开发uniapp插件时,context

  • 在Android开发中,Context是一个非常重要的概念。它表示Android应用程序或组件的当前状态和信息。当您开发Uniapp插件时,可以使用Context来访问应用程序资源,如字符串、布局、图片等等。

    在Uniapp插件开发中,您可以通过以下方式获取Context:

    1. 在Activity或Service中获取:如果您的插件需要在Activity或Service中执行操作,则可以使用getContext()方法来获取当前的Context。

    2. 在Application中获取:如果您的插件需要在Application层面执行操作,则可以使用getApplicationContext()方法来获取当前的Context。

    3. 从传入的参数中获取:有些情况下,您可能需要从外部传入一个Context,比如在创建Dialog时。这时候,您可以从传入的参数中获取Context。

    请注意,在使用Context时需要避免内存泄漏和空指针等问题。例如,在创建Dialog时,应该使用Activity的Context而不是Application的Context,否则可能会导致内存泄漏。同时,也需要注意及时释放Context以避免空指针异常。

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com