手持喷码机可以打可印刷 变量条形码码吗?

当前位置:
& React Native - 开发工具Atom+Nuclide详解(安装、使用、代码调试)
React Native - 开发工具Atom+Nuclide详解(安装、使用、代码调试)
发布:hangge
阅读:2697
虽然直接使用简单的文本编辑器就可以进行 React Native 开发,但一个好用的 IDE 可以让开发更加事半功倍。官方推荐使用 Atom+Nuclide 插件进行 React Native 开发。
关于 Atom 我之前有写过文章介绍,所以这里就不再说明了。本文主要介绍 Nuclide 插件的安装和使用。以及如何使用 Atom+Nuclide 进行 React Native 的开发调试。
一、安装配置
1,Nuclide介绍
Nuclide 是 Facebook 推出的一套基于 Atom 的开发工具集。用于开发基于 Hack 的 Web 应用。优点如下:
提供自动完成和 JavaScript 类型检查
支持 Facebook 的 Flow JavaScript 类型检查器。
方便的 debug
进行版本控制,方便 diff
iOS 模拟器 Log
2,准备工作
(1)如果电脑没有安装过 watchman 和 flow,安装一下。
brew install watchman
brew install flow
(2)如果安装过,可以更新一下
brew upgrade watchman
brew upgrade flow
(3)还要再装个 fbjs
npm install fbjs
3,Nuclide插件安装&
(1)首先电脑上先安装好 Atom。具体可以参考我之前写的文章:
(2)打开 Atom,点击顶部菜单栏“Atom”-&“Preferences”
(3)在“Install”页面中搜索“nuclide”插件并安装。
虽然我们可以直接在 Atom 中搜索安装 Nuclide,不过这样做速度比较慢。建议还是在终端执行如下命令安装:
apm install nuclide
(4)安装完毕后打开 Atom,可以发现顶部菜单栏多了个“Nuclide”
4,Nuclide相关依赖包的安装
(1)点击菜单栏“Package”-&“Settings View”-&“Manage Packages”
(2)搜索“nuclide”,点击“Settings”
(3)勾选“Install Recommended Packages On Startup”
(4)关闭 Atom,再次打开这些依赖包便会开始自动安装。
(5)安装完毕后会看到界面上多了一条额外的 ToolBar。
5,flow路径的配置
(1)在终端中执行 which flow 命令查看 flow 路径
(2)点击菜单栏“Package”-&“Settings View”-&“Manage Packages”
(3)搜索“nuclide”,点击“Settings”
(4)滚动到 Nuclide-flow 这个区域,将上面查询到的 flow 路径填到 Path to Flow executable 中去。
二、基本使用说明
1,打开工程
我们点击界面左侧的“Add Project Folder”,可以打开一个现有的 React Native 工程。
2,flow语法检查设置
(1)首先打开我们工程里的 .flowconfig 文件,查看需要的 flow 版本。比如下面显示为:0.35.0
(2)在终端中运行 brew info flow 命令查看本机的 flow 版本(0.37.1)。版本太高了。
(3)运行如下命令安装 0.35.0 版本。(如果简单地将 .flowconfig 中版本改成 0.37.1,会发现提示很多 Error 错误)
npm install flow-bin@0.35 -g
(4)我们随便在页面上编辑保存下代码,编辑器便很快地检查出错误。
3,跳转到方法或者类型定义上
command+鼠标左键
4,代码补全
(1)比如我们输入 fun
回车后会发现自动生产了相关的代码
(2)输入 do 并回车
三、运行调试程序
1,运行程序
我们可以直接通过 Nuclide 运行项目,而不需要使用 XCode。
(1)使用快捷键 command + shift + p 打开终端选项(command palette)并输入如下命令:
react native start
(2)选择 Nuclide React Native: Start Packager
(3)打开终端,进入到项目目录
cd ~/Documents/React/TTT
(4)执行如下命令则启动 iOS 模拟器运行程序:
react-native run-ios
当然也可以指定使用的 iOS 模拟器型号:
react-native run-ios --simulator "iPhone 5s"
执行如下命令则启动 Android 模拟器运行程序:
react-native run-android
2,debug调试程序
(1)使用快捷键 command + shift + p 打开终端选项,并输入如下命令:
react native debug
(2)选择 Nuclide React Native: Start Debugging
(3)在模拟器中按下快捷键:Command+D,选择 Debug JS Remotely
(4)这时会发现 Nuclide 中自动加载了 debug 窗口&
(5)我们可以在代码中添加断点。在模拟器上使用快捷键 Command+R 重新刷新页面,可以发现程序运行后会停留在断电位置。
3,Element Inspector
通过 Element Inspector 我们可以很方便地查看应用程序中&React Native 组件分层结构。
(1)使用快捷键 command + shift + p 打开终端选项,并输入如下命令:
(2)选择 Nuclide React Inspector: Toggle
(3)出现如下界面表示正在等待模拟器 React Native 连接。
(4)在模拟器那边通过 command+d 弹出提示选项,点击 Debug JS Remotely 选项。连接上以后,当前项目的 UI 层次结构便会清晰的显现出来。【React Native开发】React Native应用设备运行(Running)以及调试(Debugging)
日期: 17:01:14
来源:ITeye
【React Native开发】React Native应用设备运行(Running)以及调试(Debugging)
转载请标明出处:
【好消息】个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:
前面的课程我们已经对React Native的环境搭建以及开发的IDE做了相关的讲解,今天我们的主要讲解的是应用设备运行(Running)以及调试方法(Debugging)。本节的前提条件就是大家已经搭建了React Native的相关环境。如果没有请关注第一讲()。
刚创建的React Native技术交流群(),欢迎各位大牛,React Native技术爱好者加入交流!同时博客左侧欢迎微信扫描关注订阅号,移动技术干货,精彩文章技术推送!
(二)创建React Native项目
需要运行和调试应用,首先我们需要使用react-native init xxproject来创建一个项目,这个步骤虽然在之前我们已经讲过了,不过这边在演示一下。
2.1.命令行运行:react-native init TestOne
[注].该命令创建项目时间有时候会比较耗时,一般几分钟吧,请耐心等待!运行日志截图如下:
2.2.在相应目录生成项目,项目的目录机构如下:
2.3.最后我们通过IDE引入该项目(Atom或者WebStorm),进行编写代码即可。
(三)应用设备运行(Running)
[注意].如果你需要应用运行在真机设备中,那么我们首先设备要开启USB调试模式。具体真机怎么样打开USB调试模式,请百度哈()
真机打开USB调试模式之后,然后连接电脑,命令行adb devices可以查看当前的设备列表信息,不过我现在电脑没有连接真机,所有只有会显示模拟器信息了。
现在大家可以看到里边有一台设备已经连接了,不过如果我们需要运行应用的话,那我们必须确保当前只有一台设备已经连接即可了。接下来我们命令行运行以下命令:
react-native run-android
接着就是开始编译代码,然后运行程序到设备中了。
在真机上运行时可能会遇到白屏的情况,请找到并开启悬浮窗权限。比如小米系统设置()
3.1.从设备上面访问实时服务器数据(这边服务器指本地代码)
当我们启动开发服务的情况下,我们可以通过以下两种方法来更新远程代码来快速的更新修改我们的应用
[注意]现在很多Android设备以及那个去除了Menu按键了,这时候我们可以通过摇晃设备来进行打开菜单,然后完成应用的重新加载,调试以及其他功能。
Android 5.0以上及更高版本,可以使用adb reverse命令
首先你的设备连接电脑,然后打开USB调试模式。接着命令行运行
adb reverse tcp:8081 tcp:8080
然后我们就可以使用Reload JS和其他的开发选项了。
Android 以下版本可以通过Wifi连接
①.手机和电脑USB连接并且电脑和手机设备在同一个Wifi网络环境下
②.采用react-native run-android运行应用。
③.现在会发现屏幕是"红色",继续下面的步骤进行解决,截图如下:
④.摇晃设备或者命令行输入adb sell input keyevent 82,打开开发者菜单,如下效果:
⑤.点击Dev Settings进入,然后选择Debug server host& port for device
⑥.输入电脑的IP地址和端口号(主要查看电脑的IP地址哦,,这边用我这边的IP地址和端口,具体要根据实际情况哦),截图如下:
⑦.回到开发者菜单,然后选择点击Reload JS。重新加载以下即可。
(四)应用调试(Debugging)-针对Android应用设备
4.1.访问应用内开发者菜单
Android设备我们可以摇晃或者点击菜单键(不过现在很多手机已经没有这个模拟按键了)。如果你使用的是genymotion模拟器,你可以打开应用,然后发现屏幕右下方有一个箭头,点击然后点击菜单图标即可。截图如下:
[注意]如果我们的APP正式发布的话(Release版本)。默认情况下我们采用gradle的assembleRelease来进行构建即可。或者通过代码ReactInstanceManager的setUseDeveloperSupport方法来进行设置是否开启调试支持。
4.2.应用刷新
正常情况下,如果我们只是修改应用的JS代码的话,那么我们可以直接点击Reload JS选择实时刷新即可。但是如果我们修改Android项目中的资源文件(例如res/drawable文件中图片)或者修改Android的源代码,那么就需要重新编译生成应用才可以生效。
4.3.Chrome开发调试工具
开发的应用进行调试的时候,我们可以使用Chrome来调试js代码,点击开发菜单中的Debugin Chrome。然后会打开一个网页:
界面截图如下:
不过第一次打开需要安装ReactDevTools(最好翻墙一下)。
安装方法教程:
Chrome添加开发调试插件:
安装完插件,回退到原来的界面,然后刷新一下即可:
如何打开开发者工具:
想必做过Web前端开发的人都知道:Chrome中可以使用option+cammod+i打开或者Chrome选择菜单-更多工具-开发者工具来进行打开控制台。不过如果我们的程序出现异常话,可以开启(Pause On Caught Exceptions)。这样程序出现异常的时候,程序会暂停执行可以更好的调试错误。
真机调试方法:
①.针对Android 5.0或更高版本的设备,可以通过USB连接,然后使用adb命令建立一个设备到电脑的转向端口:命令如下:
adb reverse tcp:8081 tcp:8081
或者摇晃打开开发者菜单,选择DevSettings,然后Debug server host for device中设置电脑的IP和端口号。
②.针对Android5.0以下的设备,连接方式Wifi,其他步骤差不多哦。
4.4..实时刷新JS
我们可以进行那个如下修改,当我们前端JS代码发生更改的时候,自动让设备进行刷新界面。
在Android平台上面,打开开发者菜单,选择Dev Settings,然后点击Auto reload on JS change选择,不过有些版本好像没有这个更选项了,默认自动刷新的。
(五)最后总结
今天我们主要讲解了React Native应用设备运行方式和真机方式,主要材料来自React Native官网,这边所有步骤我已经全部测试过下的。因为讲解起来和实际使用还是回遇到各种问题的。大家有问题可以加一下群React Native技术交流群()或者底下进行回复一下。
尊重原创,转载请注明:From Sky丶清() 侵权必究!
关注我的订阅号(codedev123),每天分享移动开发技术(Android/IOS),项目管理以及博客文章!(欢迎关注,第一时间推送精彩文章)
关注我的微博,可以获得更多精彩内容
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
1.使用缓存的目的 缓存是存取数据的临时地,因为取原始数据代价太大了,加了缓存,可以取得快些。缓存可以认为是原始数据的子集,它是从原始数据里复制出来的,并且为了能被取回,被加上了标志。 在android开发中,经常要访问网络数据比如大量网络图片,如果每次需要同一张图片都去网络获取,这代价显然太大了。可以考虑设置本地文件缓存和内存缓存,存储从网络取得的数据;本地文件缓存空间并非是无限大的,容量越大读取效率越低,可设置一个折中缓存容量比如10M,如果缓存已满,我们需要采用合适的替换策略换掉一个已有的数据对象,
今天调试一个bug的时候,情景如下:
一个Activity A,需要用startActivityForResult方法开启Activity B。Activity B的launch mode被设置为singleTask,那么在Activity B开启之后的瞬间(未等B返回任何result),Activity A中的onActivityResult方法就会被调用,并且收到一个RESULT_CANCEL的request code。
然后在ActivityB
使用Vitamio打造自己的Android万能播放器(1)——准备 一、实现目标
1.1 亮度控制 模仿 VPlayer 界面: 1.2 声音控制
模仿 VPlayer 界面:
1.3 画面缩放
根据下面API提供画面的拉伸、剪切、100%、全屏
二、Vitamio API 介绍 VideoView
2.1 public void start() 开始播放
2.2 public void pause() 暂停播放
2.3 public long getDuration()
上一篇介绍了贝塞尔曲线的简单应用
仿360内存清理效果 这一篇带来一个
两条贝塞尔曲线的应用 : 仿qq未读消息去除效果。 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/ 老规矩,先上效果图: qq的未读消息去除很炫酷,其实就是用了两条贝塞尔曲线,我们按思路来,先来画两个圆,及两条贝塞尔曲线,辅助点为圆心y坐标的一半。我们把下面移动的圆,叫做mMoveCircle. 这样一画,就很简单明了了对不对。 只要在拖动的时候 去改
最近我独立开发的项目《全医会》已经在内测当中了,很快将会上架到各大应用市场。之前开发的几个项目都因为一些原因没有上架还是比较遗憾的。所以,最近我心情格外的好。 今天在做一个新项目,专为律师和客户开发的APP,其中有一个自定义对话框的需求。这个知识点其实很简单,就是下图这个效果: 可是当我悠闲的写完以后才发现,自定义对话框里面嵌套的EditText根本无法获取焦点,无法弹出软键盘,郁闷,以前开发的软件里面没有EditText的时候一切正常,没有发现这个隐藏的坑。下图是我之前写的一个自定义对话框: 下面来解决
android引入MVVM框架时间还不长,目前还很少有应用到app中的。但它是比较新的技术,使用它来搭建项目能省很多代码,而且能使用代码架构比较清晰。本篇文章是我在学习MVVM时翻译的,篇幅比较长,先翻译前半部分。 这篇文档解析如何使用数据绑定库来写响应式布局并减少用来绑定应用程序和布局之间冗余代码,使用逻辑层和布局分离。 数据绑定库提供了即灵活又全面的兼容性——它的支持库 .so 可以用在 android2.1 平台( API level 7+ )。 使用 MVVM 需要 Gradle1.5.0-alp
参考文章 雪球的 HttpApi 接口测试框架设计 HAR(HTTP Archive)规范 神器——Chrome开发者工具(一) HAR是什么 一句话:关于HTTP所有的信息的一种文件保存格式 HAR获取 我用的是 chrome 浏览器,按 Option+Command+I 来打开开发者选项,选择 Network 选项: 这个时候我们看不到关于网络相关的信息,我们需要重新刷新下url地址栏,重新发起一次请求,这个时候 Network 会刷新出信息: 这个时候我们在输出区点击右键,会出现一个菜单,找到 Sa
Chronometer直接继承了TextView组件,它会显示一段文本,显示从某个其实时间开始,一共过了多长时间。我们看Chronometer的源码: 可以看出计时器是直接继承了TextView,当然可以用TextView的所有属性和方法。同时及时其还 有自己的内部接口OnChronometerTickListener 计时器的新增属性和方法: 计时器的常用方法如下: setBase(long base):设置计时器的起始时间 setFormat(String format) :设置显示时间的格式 sta
Visual Studio 外请版本管理插件 - AnkhSVN 太阳火神的美丽人生 ( http://blog.csdn.net/opengl_es ) 本文遵循“ 署名-非商业用途-保持一致 ” 创作公用协议 转载请保留此句: 太阳火神的美丽人生 -
本博客专注于
敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino , 否则,出自本博客的文章拒绝转载或再转载,谢谢合作。 Visual Studio 有自已的版本管理系统,叫做 TFS(Team Foun
先上效果图: 本篇文章我们来学习一个开源项目 Android-ItemTouchHelper-Demo 这个项目使用了RecyclerView的ItemTouchHelper类实现了Item的拖动和删除功能,ItemTouchHelper是v7包下的一个类,我们看一下他的介绍 This is a utility class to add swipe to dismiss and drag drop support to RecyclerView. 这是一个工具类,专门用来配合RecyclerView实现滑
Copyright (C)
ITfish.net当前位置:
& React Native - 调试技巧及调试菜单说明(模拟器调试、真机调试)
React Native - 调试技巧及调试菜单说明(模拟器调试、真机调试)
发布:hangge
阅读:1131
一、模拟器调试
我们在模拟器上按快捷键 command + D,即可弹出如下调试菜单。下面分别介绍菜单中的各个调试功能。
刷新页面,其快捷键是 command + R。
注意:只有修改 JavaScript 文件时,刷新功能才起作用。如果新增了文件或者修改了 Native 代码,就需要使用 Xcode 重新编译应用了。
2,Debug JS Remotely
(1)该功能允许开发人员在 Chrome 中调试应用,其调试方式和调试 Web 应用一样。
(2)当改功能被点击时,React Native 会启动 Chrome 浏览器,并且打开一个 http://localhost:8081/debugger-ui 的新标签。
(3)在这个标签页中,我们打开开发者工具,选择 Console,就可以看到输出的日志信息了。
(4)在 Sources Tab 页中还可以显示当前调试项目的所有 js 文件。并在上面进行断点调试。
3,Enable Live Reload
该功能主要用来实现自动刷新。当我们将实时加载启用后,如果应用中的 JavaScript 代码有任何修改,它都会自动帮我们更新,不需要人为去操作刷新功能。
4,Start Systrace
该功能主要用来监控应用在一段时间内的指标信息。
(1)我们点击“Start Systrace”开始监控。
(2)然后在操作后选择“Stop Systrace”结束监控。这时会弹出一个提示框,告诉我们数据已经生成。打开生成的 JSON 文件,就可以看到应用在这段时间内的详细指标信息了。
(3)如果我们装了 google 的 trace-viewer 插件,包服务器会帮我们自动调用 trace2html 命令打开这个 JSON 文件。
5,Enable Hot Reloading
启用热加载,同样是实现页面的自动刷新。
热加载的思想是运行时动态注入修改后的文件内容,同时不中断 APP 的正常运行。这样,我们就不会丢失 APP 的任何状态信息,尤其是 UI 页面栈相关的。
热加载(Hot Reloading)与上面提到的实时加载(Live Reload)最关键的区别:
(1)实时加载应用更新时需要刷新当前页面,可以看到明显的全局刷新效果。
(2)而热加载基本上看不出刷新的效果,类似于局部刷新。
6,Show Inspector
(1)我们可以很方便的查看到当前选中元素的位置、样式、层级关系、盒子模型信息等等。方便我们快速定位问题。
(2)同时还提供了监控应用性能的功能。
7,Show Perf Monitor
该功能启用后会显示一个监控窗口,显示出实时的内存占用、UI 和 JavaScript 的 FPS 等信息。帮助我们调试性能问题。
二、真机调试
(1)将手机连接电脑。并在 Xcode 中,选择你的手机作为目标设备。
(2)选择好项目使用的开发者账号。
(3)同时相关的 Tests target 里同样也要选择使用的开发者账号。
如果这里没设置的话会出现如下错误,无法启动程序。
Signing for "HelloWorldTests" requires a development team. Select a development team in the project editor.
Code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 10.0'
(3)确保手机和 Mac 电脑在同一个网络环境下。然后编译运行程序。
React Native iOS 在新版中 BundleURL 加载方法做了重大改变,新增了 RCTBundleURLProvider 单例类专门处理 BundleURL,使用 NSUserDefaults 保存配置信息。
在 Debug 模式下,执行 react-native-xcode.sh 编译脚本会自动获取当前网卡 en0 的 IP 地址,并打入 App 包中一个配置文件 ip.txt,App 运行时会读取 ip 文件,自动生成 Developer Server URL。
这种加载方式的好处是:我们不再需要手动去把"localhost"改成 Mac 的 IP 了,每次编译都会读取当前最新的 IP。
(4)应用启动后,只需要摇一摇手机可以调出调试菜单,里面具体功能同模拟器一样,这里就不再说明了。
(5)由于 React 的特性,手机运行应用后,就可以断开数据线了。后面电脑上只要修改了 js 文件,手机上就能自动加载或实时热更新。react-native —— 在Windows下搭建React Native Android开发环境 - 推酷
react-native —— 在Windows下搭建React Native Android开发环境
在Windows下搭建React Native Android开发环境
前段时间在
收藏了 @天地之灵_邓鋆 分享的《
的抓取内容可以看到一部分,由于一直在休假就没有仔细学习,今天再次回顾我的收藏时却发现链接打不开(其实当时也有发现,只是这么说一下罢了)。于是,你应该知道怎么做的,最好的工具莫过于搜索而不是一味的抱怨说只能在mac上玩。之前因为react native ios肯定是只能在mac上玩,Android就不那么必须了。好了,我来开始搭建一下环境试试。
React Native Android
下载JDK并安装。请注意选择
版本。我在这里直接接受了 @天地之灵_邓鋆 的推荐将JDK的bin目录加入到了系统PATH环境变量。注意:下载链接不能直接使用,需要先接受协议(这里有存入cookies),可以通过
设置环境变量PATH:jdk的位置。例如:(PATH =& D:\Program Files\Java\jdk1.8.0_60\bin)
安装Android SDK
单独安装Android SDK,在墙的环境下,为了速度我选择了使用
设置环境变量ANDROID_HOME:Android SDK Manager的位置 例如:(PATH =& D:\Program Files\Android SDK Tools)设置环境变量PATH:例如:(PATH =& %ANDROID_HOME%\%ANDROID_HOME%\platform-tools)
安装React-native-cli
npm install -g react-native-cli
初始化项目
react-native init reactNative
This will walk you through creating a new React Native project in d:\www\project
\reactNative
events.js:85
// Unhandled 'error' event
Error: spawn npm ENOENT
at exports._errnoException (util.js:746:11)
at Process.ChildProcess._handle.onexit (child_process.js:1053:32)
at child_process.js:1144:20
at process._tickCallback (node.js:355:11)
at Function.Module.runMain (module.js:503:11)
at startup (node.js:129:16)
at node.js:814:3
windows下执行到这里就会报错,原因是npm在windows下的bug(来源于参考资料)。解决办法,直接clone项目主分支master。
git clone /facebook/react-native.git
cd react-native/react-native-cli && npm install -g
接下来就可以初始化项目了
react-native init reactNative
运行packager
这里最新的版本已经修复了 @天地之灵_邓鋆 提到的BUG。
在工程目录下运行
node node_modules/react-native/packager/packager.js
这条命令会看见程序开启了8081端口,并且运行
可以看见项目代码输出。
Run android app
cd reactNative
react-native run-android
如果没有安装安卓模拟器,这里可以直接使用真机安装测试。这个过程很漫长,等等等……
目前Windows下无法自动打开chrome进行调试,所以手动打开chrome,访问如下地址:
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
& failed to find target with hash string 'android-23' in: D:\Program Files\Andro
id SDK Tools
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.
BUILD FAILED
Total time: 10 mins 42.463 secs
Could not install the app on the device, see the error above.
解决办法就是安装Android-23,对于上一篇关于ionic的文是需要Android-22。
Could not find com.android.support:appcompat-v7:版本号.
安装 Android Support Libraries 和 Android Support Repository
build成功,安装上apk后界面红了
选择菜单:Dev settings
选择项:Debug server host for device
设置编译环境PC的IP地址,例如:192.168.25.121
确保手机与编译环境在同一WIFI环境下(IP段相同),packager在运行状态下,重启APP
初始化欢迎界面就出来了,后面继续学习中……
这个hello world过程一波三折,主要归结为以下几点:
墙。我使用的是ss,但是这个过程中还是会有问题,主要是家用环境下。这个关系到npm的使用,这个可以使用淘宝镜像。Android环境搭建,这个我是在Androiddevtools上找的方法,公司环境下轻松安装,家用环境到现在还是没有搞定。
bug。这个过程中本身就有一些问题,关于node版本的问题(手动升级4.1.1),react-native版本的问题(手动clone 0.12-rc)。
如果以上问题解决了,我想这个过程还是很愉快的。只想吐槽一下学习不容易啊。接下来主要的内容就是学习,同时学习ionic与react-native其实就是表层在同时在学习angular与react,至于深层次的我还不懂,暂时也不必细节。学知识,我是先学会用,再学习为什么要这么用,你呢?交流很关键,总结很重要。不是随时都有时间来重新学习,珍惜眼下充裕的时间,学习,学习,学习。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 印刷 变量条形码 的文章

 

随机推荐