混合APP开发的套路(三): android和javascript初步交互

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植 本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。 阅读详情

我们测试方便,我们利用布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试文本"
        android:id="@+id/wvText"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="调用javscript"
        android:id="@+id/wvBtn"/>
    <WebView
        android:layout_width="match_parent"
        android:layout_height="227dp"
        android:layout_weight="0.27"
        android:id="@+id/webView"/>
</LinearLayout>

我们会吧本地index.html文件加载到WebView 控件中,然后点击Button 控件,执行一段javascsript脚本(一个js方法).

index.html内容如下:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>this is title</title>
        <script>
            function show(){
                document.getElementById("txtMsg").value = "hello javascript";
            }
        </script>
    </head>
    <body>
        <input type="text" id="txtMsg">
    </body>
</html>

show() 方法实现了,把hello javascript 写入到input文本框。
我们要在安卓里来调用这个show() 方法。

Activity里:

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.webview); // 设置layout

        // 获取webView组件
        final WebView webView = (WebView)findViewById(R.id.webView);

        // 拿到webView的设置对象
        WebSettings settings = webView.getSettings();
        settings.setAppCacheEnabled(true); // 开启缓存
        settings.setJavaScriptEnabled(true); // 开启javascript支持

        // 加载文件到webView
        AssetManager assetManager = this.getAssets();
        try {
            InputStream inputStream = assetManager.open("index.html");
            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            // 读取html内容
            String htmlContent = new String(buffer,"utf-8");
            inputStream.close();

            // 加载到webView中
            webView.loadData(htmlContent,"text/html","utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 找到界面上的按钮
        Button btn = (Button)findViewById(R.id.wvBtn);
        // 给按钮绑定事件
        btn.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                webView.loadUrl("javascript:show()");
            }
        });
    }

这里写图片描述

基于SolidWorks宏的草图点坐标自动化提取与Excel集成 本文详细介绍了如何利用SolidWorks宏编程实现草图点坐标的自动化提取并与Excel集成,显著提升机械设计效率。通过VBA代码解析与优化,解决了人工记录坐标耗时易错的问题,并扩展了多草图批量处理、数据可视化等高级功能,适用于数控加工、质量检测等场景。 阅读详情

相关推荐

FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析

FPGA学习之路——原码二位乘法器及Verilog代码分析 原理 原码乘法可以分为原码一位乘和原码二位乘,两者在实现规则上大同小异。原码一位乘每次判断乘数的最低位,对被乘数和部分积进行相应操作。而原码二位乘则是对乘数的低二位进行判断,并执行相关操作。 两位乘数的取值可以有四种可能组合,每种组合对应于以下操作: 00相当于0x,部分积Dresult右移2位,不进行其他运算; 01相当于1x,部分积D...

谦豫 3716

混合APP开发的套路(三): android和javascript初步交互(js调安卓)

http://blog.youkuaiyun.com/github_26672553/article/details/68944631 前面我们实现了,在安卓里调用 js代码。现在我们来看看,js里如何调用android里的方法。首先,我们在Activitity里(我们这是WebViewActivity.java),定义一个方法 @JavascriptInterface public void

1358

UniApp消息推送进阶:不用插件实现动态语音播报(含保活策略)

本文详细介绍了在UniApp中实现动态语音播报的进阶方案,无需依赖第三方插件。核心采用透传消息传递动态数据,结合本地TTS引擎合成语音,并针对不同安卓厂商提供了深度通道配置与差异化保活策略,有效解决了App退至后台或被清理后语音播报失效的难题。

weixin_29224309的博客 486

混合APP开发的套路(二):加载项目中的html

关于res和assets文件夹1、两者都可以存放资源文件,打包时都会被编译进apk里。其中res中的资源如果没有用到,打包时不会被编译 2、res文件夹中文件会被映射到R.java文件中,可以通过R.layout.xxx或者R.id.xxx来访问;assets里面的文件,可以通过AssetManager对象来读取 3、assets里面还可以定义自己的文件目录结构 (如果没有此文件夹,新建)1、

1615

量化交易新手必看:如何用Python快速接入XTP极速交易系统(附避坑指南)

本文为量化交易新手提供了使用Python快速接入中泰证券XTP极速交易系统的完整指南。文章详细介绍了XTP系统的微秒级性能优势、与CTP系统的核心区别,并逐步讲解了环境配置、API连接、资金查询、下单撤单等关键步骤,同时分享了网络维护、订单处理等实战避坑技巧,帮助开发者高效对接专业交易柜台。

life6的博客 659

基于LangGraph的智能报告生成平台项目分析

不知道你是否知道或者了解OpenAI and Gemini Deep Research。他们是一种能够根据输入问题进行规划、结合网络搜索获取信息并最终呈现结果的研究工具或技术。那这样research是如何实现的呢?最近刚好看到一个实现类似功能的开源项目: open_deep_search。本文将基于该项目进行代码层面剖析。

u011160113的博客 923

如何选择Web APP与Native App原生开发模式的区别

APP开发模式通常分为Web APP与Native APP原生模式两种,这两种模式均各自有自己的优势,到底是采用Native App开发还是采用Web App开发一直是业界争论的焦点,但是随着HTML5的发展及云服务普及,采用HTML5进行Web App开发正在成为一种趋势,用户可以根据应用特点和需求进行选择,亦可选择两者混合模式:   Native App开发   Native App开发即

学无止境 5880

太空安全卫士:基于YOLOv5的空间态势感知系统(实现轨道碰撞预警与太空环境保护)

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护宇宙安全”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了航天监测的哪些痛点、YOLOv5在太空目标检测中的性能优势、系统未来能怎么优化(比如对接航天监测网络、实现实时轨道预测)。未来,这个系统还能往“更智能”的方向发展:比如结合轨道计算预测碰撞风险、开发移动端APP让天文爱好者参与太空垃圾上报、在航天任务中实现全自动避障决策……想象空间很大。

m0_71589036的博客 90

Application Layout for Beginners (布局的初级入门)

事前准备本教程假设你已经安装好ExtJS库。安装的目录是extjs 并位于你程序的上一级目录。如果安装在其它地方你必须更改路径,更改示例文件中script标签的src的属性。 需要些什么?除ExtJS库本身外,我们还需要两个文件: applayout.html applayout.js 先看看一份html文档,比较精简。并附有详细说明: ap

solem的专栏 570

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。

2万+

MDIO接口协议与其详解——单片机

在单片机领域,通过MDIO接口可以与外部设备进行通信,实现对设备的控制和数据的读写。通过本文的介绍,你可以了解到MDIO接口协议的原理和使用方法,并参考源代码示例进行实际的开发和应用。具体的初始化方法与单片机的型号和开发环境有关,可以参考相应的单片机手册和开发工具的文档。(1)发送读取命令:向MDIO线发送读取命令,通常是发送一个特定的控制字节,用于指示要读取的寄存器地址。(1)发送写入命令:向MDIO线发送写入命令,通常是发送一个特定的控制字节,用于指示要写入的寄存器地址。二、MDIO接口协议使用方法。

web_class282的博客 2623

Android混合开发,html5自动更新爬过的坑

现在使用混合开发的公司越来越多,虽然出现了一些新技术,比如Facebook的react native、阿里的weex,但依然阻挡不了一些公司采用h5的决心,当然,这也是从多方面考虑的选择。在三年前就使用过html5混合开发,当时做的是一款贵金属软件,涨跌五线谱、乾坤交易,还有各个股市的信息,那时候还是上波牛市爆发的前夕,哎。。。最近公司让用h5混合开发,一些页面和功能有h5分担,最初时候放在本地as

Zero 8991

事件驱动的 SAP 工作流:从 BOR 事件到 Event Linkage 的落地与排障全景图

摘要: SAP工作流中的Event是业务对象状态变化的系统广播机制,如发票录入、采购订单释放等事件。通过事件驱动,业务程序与流程引擎解耦,业务只需发布事件,流程引擎负责后续处理。文章详细解析了SAP工作流事件的完整链路,包括事件定义、触发机制、事件容器传递、SWE2配置的关键作用,以及事件不触发时的排查方法。重点介绍了事件在启动流程、终止任务、等待步骤和主动创建中的应用,并结合采购订单审批案例说明事件的实际使用场景和配置要点。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 189

android和前端混合开发工具,【Web前端问题】android 和vue 混合开发的套路是?

本人工作之余写了个小demo后端使用php返回的接口部分数据要么python爬到我的数据库然后返回接口要和直接用别人的接口 比如追书神器大部分页面功能使用vue登录注册会员中心之类使用原生android等于在vue页面上 使用webview 套了个原生壳子但是其他一些问题本人因为没有时间混合app开发项目经验 感觉许多不懂比如 页面之间的跳转 因为我使用fragment页面加载webview如下效...

weixin_42511714的博客 682

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

打融合包 安卓 php,【安卓】android 和vue 混合开发的套路是?

本人工作之余写了个小demo后端使用php返回的接口部分数据要么python爬到我的数据库然后返回接口要和直接用别人的接口 比如追书神器大部分页面功能使用vue登录注册会员中心之类使用原生android等于在vue页面上 使用webview 套了个原生壳子但是其他一些问题本人因为没有时间混合app开发项目经验 感觉许多不懂比如 页面之间的跳转 因为我使用fragment页面加载webview如下效...

weixin_32042443的博客 140

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

加速鸿蒙生态建设,APP混合开发或许是企业抢占增量流量的机会

更值得兴奋的是,它不仅仅是简单的AI调用能力,加上小程序的小组件功能,前端「乐高化」开发真的可以实现,以实现更复杂、更智能的用户交互和内容展示,提升用户体验 。 似乎全球都在入局AI,不进步就是落后。

speedoooo的博客 1213

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android开发工程师:都想要进大厂,那么大公司面试的方向和面试官套路你都摸透了吗?

比如常用的listview,recycleview,gson,okhttp,图片加载框架,内存优化,内存溢出,传感器(sensormanager),兼容性(分两个方面,第一UI适配(今日头条适配方案),第二性能适配(so文件))。

2401_89872656的博客 1872

Android开发工程师:都想要进大厂,那么大公司面试的方向和面试官套路你都摸透了吗

算法 这个从各个大公司的招聘来看,都有这个方向的要求。并且有童鞋在去面试的过程中,真的有问算法方面的问题。这个主要考察一个人的解决问题的能力,思路能力,是否开阔,活跃。 并且这种题有2种考法。第一种是用Java或者安卓代码能实现的方法去解决。第二,可以不考虑具体用代码怎么实现,而是要看你的分析问题,解决问题的能力。当然第二种的情况比较少。 混合开发经验 **这个是目前很火的一种安卓开发工程师的需求。Hybrid开发经验。**已经有众多Hybrid App开发成功应用,比如美团、爱奇艺、微信等知名移动应用.

m0_66264588的博客 1487

安卓线程同步面试_安卓开发工程师——大公司面试的方向和套路

▼ 今天小狮妹给大家说说中高级安卓开发工程师岗位在大公司应聘中的复习方向: 安卓已经火了这么多年了。现在如果还从事安卓开发,基本上都是中高级安卓开发工程师。那么接下来就看一下用人单位在对中高级安卓开发工程师方面的要求要达到什么程度呢?▼基础问题 面...

weixin_34342446的博客 108

uniapp 生成html5_H5开发移动端APP基于uni-app

之前写过基于mui,h5 plus的APP开发https://www.jianshu.com/p/8e7e8312f93d,这次在写个兄弟篇 uni-app开发APP。同为DCloud出品还是同样的配方、熟悉的味道,而且支持更多的平台。1、为什么选择uni-app基于mui,h5plus这一套技术操作随着后续的开发及项目跟进感觉越发力不从心。功能及模块通用型越来越被需要,不同业务、不同类型的全局变...

weixin_39902608的博客 4271

混合APP开发的套路(四):在html页面中打开项目中的Activity

前面我们学习了android和 网页(javascript)的交互,互相调用函数。 今天我们要来学习,如何在html页面中打开安卓项目中的Activity。1、准备 做一个登录界面。 新建布局文件login.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.

1583

html5开发app简单些吗,用HTML5开发App真的好嘛?

Html5一直在更成熟的路上努力,跟随他的框架比如WeX5也都在快速的版本更新中,目前性能问题已经迈进了很大的一步,采用单页加载模式,可以运行畅快无阻!相信html5会称霸前端的,IOS安卓慢慢会演变成后端语言了.在UI方面,HTML5是以申明方式使用较为高层次的组件来拼UI的,你拿 Xcode 的 Interface Builder 画其实也很快的。其实 CSS / Javascript 想要学...

weixin_35516624的博客 397

混合APP开发的套路(五): Activity保存登录用户名

前面我们已经搭建了一个登录界面,现在我们来尝试保存登录的用户名。 利用安卓SharedPreferences 这个API.1、在登录界面,点击登录按钮之后,保存用户名。 LoginActivity.javapackage com.example.dev.firtapp; import android.content.Intent; import android.content.SharedPre

1100

这些年Android面试的那些套路,Service有几种启动方式

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。点击我的GitHub不论遇到什么困难,都不应该成为我们放弃的理由!roid程序员们学习。[外链图片转存中…(img-1To8Vk7O-1710136043014)]

m0_60666841的博客 843
上一篇: 混合APP开发的套路(二):加载项目中的html
下一篇: 混合APP开发的套路(三): android和javascript初步交互(js调安卓)
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值