移动端web页面开发中遇到的三个“小坑”

本文分享了移动端开发中的几个实用技巧,包括避免在简单场景下过度使用JS插件、利用meta标签实现APP唤醒及了解浏览器默认行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前自己接触的移动端项目很有限,所以发现的坑不是那么多,暂时只记录下最近在解决的小坑

一、简单的移动端页面最好不用JS插件

在开发中使用自己熟悉的框架或者插件对自己的开发效率帮助是很大的,但是在实际的开发中不能求效率而不考

虑后续的扩展性,毕竟用户的需求是不断变化的。以移动端用的较多的iScroll为例,如果你开发中,只是用了它的滑

屏功能,其他地方并没有展示出它的优势,建议还是使用Css来实现比较好。

首先,IScroll会让原本简单的功能实现变得复杂,例如锚点,使用了iscroll以后,href=”#anchor”是无效的,需要

使用IScrolljs方法 , myScroll.scrollToElement("#anchor", time)

其次,IScroll会阻止部分DOM事件,目前遇到比较明显的情况就是,video标签定义的视频在移动端播放受到影

响,安卓手机上的问题差异很大,例如无法点击播放、点击事件无响应等。

再次,在简单的项目中移动端页面使用的范围可能很有限,也许只需要一个模板页面即可,使用插件反而会影响移动端响应速度,影响后期体验优化,得不偿失。

 

二、mate标签功能其实挺强大

最近有使用js唤醒本地安装APP的功能需求,现在采用的比较多的方式就是使用插入iframe的方式,配置APP的唤醒连接,在AndroidiOS9以下的iPhone上好用的,但是在iPhone上体验是很不好的。在iOS9系统上,这个方式就不行了。如果使用location.href直接打开连接,一直会有安全提示,并且不一定能打开APP

总之,jsiPhone中唤醒APP并不如安卓中顺利。这里可以使用meta标签来完美唤醒‘沉睡中的APP


直接上方法:

<span style="font-size:18px;"><meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL"></span>

其中affiliate-dataapp-argument选填,app-id必填

例如,我需要唤醒“亿企赢财税的APP,下面的配置就能起作用。

<span style="font-size:18px;"><metaname="apple-itunes-app" content="app-id=1127148565, affiliate-data=myAffiliateData,app-argument=winwin://"></span>

Note:

Safari has a new Smart App Banner feature in iOS 6 and later that provides a standardized method of promoting apps on the App Store from a website.

如果你手机上没有安装这个APP,他会带领你去appstore下载。

当我纠结很久在iOS9中唤醒APP的时候,这个标签真心是个大救星啊,赞!



三、浏览器默认的某些性质要知道

对移动端web开发人员来讲,最长用的单位就是CSS3引入的rem,这种善于“变换”的单位真的“弹”力十足,

rem“弹”得起来前提是你要有根据屏幕宽度改变而改变的根元素font-size,进而对整个页面的rem做调整,从而达到适应不同尺寸屏幕的目的。

<span style="font-size:18px;">function rootRize() {
        var initWidth = 750;
        var thisWidth = document.documentElement.clientWidth;
        thisWidth > 750 ? thisWidth = 750 : '';
        document.getElementsByTagName('html')[0].style.fontSize = 20 * (thisWidth / initWidth) + 'px';
    }
    window.onload = rootRize;
window.onresize = rootRize
</span>

例如这样改变页面根元素大小,但是在谷歌中你会发现,当不断减小页面宽度的时候,根元素的font-size虽然在

变,但是到某个点的时候,页面的rem却不变了!!!然而在ff中是ok的。为什么?



Google chrome iswrong



FF is Fine




其实出现这种状况的原因很简单,那就是谷歌浏览器“强制”最小的font-size是12px,所以,当根标签小于12px的时候,在谷歌浏览器中会出现上述的问题,解决的方法就是将font-size尽量设大,让其在320px宽的小屏手机中也能正常改变rem。

另外两个特殊值也要记住:

16px

62.5%

很多的开发者一开始就是用html{font-size:62.5%},第一次见的时候我是有点懵的,为什么要这样设置字体大小?

因为16 X 62.5% = 10px,这样使用rem来设置某些css的宽度高度什么的就方便计算了,其中的16px是浏览器默认的字体大小

坑不坑因人而异,欢迎提出更好的解决方案!




<think>嗯,用户想知道如何把用Python开发的功能在安卓系统上实现。这个问题挺常见的,特别是现在移动应用需求大,但Python在安卓上运行并不是直接支持的。我需要先理清楚可能的解决方案,然后一步步解释。 首先,用户可能已经有一个Python写的功能,比如数据处理、机器学习模型之类的,现在想在安卓应用里使用这个功能。但安卓原生是用Java或Kotlin的,所以直接运行Python代码会有问题。我需要考虑几种方法,比如将Python代码转换成Java,或者用一些工具打包成APK,或者通过后端服务调用。 常见的解决方案可能有几种:使用BeeWare或Kivy这样的框架,它们支持用Python开发移动应用;或者用Chaquopy这样的库在安卓项目中嵌入Python;还可以把Python代码转成可执行文件,或者通过Web服务提供功能,让安卓端调用API。 需要逐一分析这些方法的优缺点。比如,Kivy和BeeWare适合开发完整的应用,但如果用户只是想在现有安卓项目里加入某个Python功能,可能Chaquopy更合适。或者如果功能复杂,可能需要Web服务的方式,这样安卓端只需处理网络请求。 还要考虑性能问题,Python在移动端的运行效率可能不如原生代码,特别是计算密集型的任务。另外,APK的大小也是一个因素,打包Python解释器和依赖库可能会让安装包变大。 然后,用户可能需要具体的步骤指导,比如使用ChaquoPy的步骤,如何配置Gradle,如何处理依赖。或者用Kivy打包的流程,需要安装哪些工具,比如Buildozer。这些都需要详细说明,但也要注意不要太复杂,让用户能一步步跟着做。 另外,需要注意用户可能对安卓开发不太熟悉,所以可能需要解释一些基本概念,比如APK打包、Gradle配置、服务端API调用等。同时要提醒可能遇到的,比如依赖冲突、权限问题、兼容性等。 最后,总结一下各个方案的适用场景,帮助用户根据具体情况选择最合适的方法。比如,小型工具类应用可以用Kivy,现有安卓项目集成Python用Chaquopy,复杂计算用Web服务等。</think>将Python功能移植到安卓系统可通过以下五种方案实现,按实现难度和适用范围排序: 方案一:使用Kivy框架(Python原生开发) 1. 环境准备: ```bash pip install kivy buildozer ``` 2. 创建main.py: ```python from kivy.app import App from kivy.uix.button import Button class MyApp(App): def build(self): return Button(text='Hello Python!') if __name__ == '__main__': MyApp().run() ``` 3. 打包APK: ```bash buildozer init buildozer android debug deploy run ``` 方案二:Chaquopy(Android Studio集成) 1. 在build.gradle添加: ```groovy android { defaultConfig { python { version "3.8" } } } dependencies { implementation "com.chaquo.python:gradle:12.0.0" } ``` 2. 创建Python脚本: ```python # app/src/main/python/example.py def add(a, b): return a + b ``` 3. Java调用: ```java Python py = Python.getInstance(); PyObject obj = py.getModule("example").callAttr("add", 1, 2); ``` 方案三:Web服务化(推荐用于复杂计算) 1. 用Flask创建API: ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/calculate') def calculate(): result = your_python_function() return jsonify(result=result) ``` 2. 安卓端使用Retrofit调用: ```java public interface ApiService { @GET("calculate") Call<ResponseBody> calculate(); } ``` 方案四:Termux+Python(快速原型开发) 1. 安装Termux(F-Droid商店) 2. 终端执行: ```bash pkg install python pip install numpy pandas # 安装所需库 python your_script.py ``` 方案五:TensorFlow Lite(机器学习专用) 1. 转换Python模型: ```python import tensorflow as tf converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) tflite_model = converter.convert() open("model.tflite", "wb").write(tflite_model) ``` 2. 安卓集成: ```java Interpreter tflite = new Interpreter(loadModelFile()); float[][] input = new float[1][INPUT_SIZE]; float[][] output = new float[1][OUTPUT_SIZE]; tflite.run(input, output); ``` 方案对比: 1. 开发成本:Kivy < Chaquopy < Web服务 < TFLite < Termux 2. 性能表现:TFLite > Chaquopy > Web服务 > Kivy > Termux 3. 维护难度:Web服务 < TFLite < Chaquopy < Kivy < Termux 常见问题处理: 1. 依赖冲突:使用`pipenv`或`poetry`管理虚拟环境 2. 打包体积过大:启用ProGuard优化,排除无用库 3. C扩展支持:Chaquopy仅支持部分C扩展(如numpy),需预编译.so文件 建议选择路径: - 简单GUI工具 ➔ Kivy - 现有安卓项目集成 ➔ Chaquopy - 高频计算任务 ➔ Web服务 - 机器学习模型 ➔ TensorFlow Lite - 快速验证原型 ➔ Termux 最新方案推荐(2024): Google推出的Android ML Model Binding可自动生成Python到Java的适配代码,支持直接调用.py文件(需Android Studio 2023.3+)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值