- Android Permission权限总结
通信赵彩香
android
1.权限Permission权限是安卓的一种安全机制,主要用来保护用户,应用的数据安全。1.1、版本差异Android权限机制有一个分水岭,就是Android6.0API23,对于危险权限的申请有所不同。Android开发头疼的一点就是适配兼容,说不定以后所有的权限都要动态申请!①targetSdkVersion<23&API<6.0:安装后就有权限,无需授权,无法取消授权②targetSdkVe
- Android的权限部分详解
向上_50358291
权限android笔记
一、背景应用权限有助于保护对数据和操作的访问/执行权限,从而为保护用户隐私提供支持。如果应用必须访问受限数据或执行受限操作才能实现某个用例,请声明相应的权限。Android将权限分为不同的类型,包括安装时权限、运行时权限和特殊权限。每种权限类型都指明了当系统授予应用该权限后,应用可以访问的受限数据范围以及应用可以执行的受限操作范围。每项权限的保护级别取决于其类型以及对车机的影响。当然你也可以访问A
- Android+jacoco实现代码覆盖率的方式,亲测有效
向上_50358291
androidgradlejava
前言:jacoco是JavaCodeCoverage的缩写,是Java代码覆盖率统计的主流工具之一。关于jacoco的原理介绍的文章在网上有很多,感兴趣的同学可以去找别的博客看看,我这里不做赘述。它的作用是在安卓项目的代码覆盖率统计使用了jacoco的离线插桩方式,在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试(单元测试、UI测试或者手工测试等)插过桩的class和jar包后
- android10adb模式命令大全,史上最全ADB命令使用大全,一步教你成为玩机大神
熊仔仔仔仔
以下文章互联网博主:隔壁小胡ADB简介adb相信很多android开发者会用到它来进行调试手机,助手类软件也是依赖它来实现机型识别,软件安装,软件传送等功能。原版的adb由于在windows下各大手机助手类软件占用导致无法启动。具体adb介绍可以google或百度。ADB基本用法一、命令语法adb命令的基本语法如下:adb[-d|-e|-s]如果只有一个设备/模拟器连接时,可以省略掉[-d|-e|
- XXPermissions:Android权限请求框架
高喻尤King
XXPermissions:Android权限请求框架XXPermissionsAndroid权限请求框架,已适配Android14项目地址:https://gitcode.com/gh_mirrors/xx/XXPermissions项目基础介绍XXPermissions是一个由CSDN公司开发的Android权限请求框架,主要使用Java编程语言进行开发。该框架旨在简化Android应用中权限
- Android中的权限管理机制
Good_tea_h
androidphp开发语言
Android中的权限管理机制Android权限管理机制是为了确保用户数据和设备安全而设计的一种机制。它通过Android系统的权限模型来管理应用程序对设备功能和数据的访问权限。Android系统基于用户和应用程序的安全需求,将设备上的各种功能和数据划分为不同的权限,并通过权限管理机制来控制应用程序对这些功能和数据的访问权限。这一机制的核心在于通过用户授权来控制应用程序的权限,从而保护用户隐私和数
- Android之权限架构
向上_50358291
android架构
1.权限简介:所有的权限定义在Android系统的源代码中,路径通常位于frameworks/base/core/res/AndroidManifest.xml。本篇文章以Android15原生源码来做的讲解。LI、LIF、LPr、LPw是什么?首先L代表Lock,I代表mInstall,P代表mPackages,F代表frozen,r代表读,w代表写。2.安装时权限:2.1普通权限(Normal
- rockchip android11中实现双屏异触的功能
路奇的电脑
java
在定制客户需求的时候,很多客户的需求需要用到双屏异触的功能,当客户的两个屏幕都是usb的触摸屏时,我们可以用以下的方法来实现这一需求:代码路径是frameworks/native两个usb的触摸屏,PID:0x0001主屏,PID:0x0eee副屏diff--gita/services/inputflinger/reader/EventHub.cppb/services/inputflinger/
- adb结合wpa_cli查看wifi状态命令集
weixin_33790053
shell数据库python
2019独角兽企业重金招聘Python工程师标准>>>1.status查看当前的WIFI状态adbshellwpa_cli-iwlan0-g@android:wpa_wlan0IFNAME=wlan0statusbssid=70:62:b8:62:2e:c4//一个长度为48位二进制的数字标志,用于识别不同的BSS(BasicServiceSet)基本服务集,主要用于过滤freq=2412(1)2
- 1、wpa_supplicant介绍--配置参数说明
AryShaw
ubuntulinux网络
转载自:[https://zhuanlan.zhihu.com/p/674052171],侵权请告知,立即删除。一、wpa_supplicant简介及使用:1.wpa_supplicant简介:wpa_supplicant是linux系统和android系统用来配置无线网络的开源工具,它是WPA的应用层认证客户端,负责完成WEP,WPA/WPA2和WAPI等无线协议认证相关的登录和加密等工作。wp
- Android wpa_supplicant
一个学渣的自我救赎
AndroidWi-Fiandroid
一、wpa_supplicate介绍WPA,是Wi-FiProtectedAccess,Wi-Fi安全访问的简称。wpa_supplicant是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的。WPA_Supplicant功能:通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动
- Android 10适配获取设备信息
2401_89791130
android
}作者在对待Android10及以上的用户进行了return""的操作,但我们在开发的过程中是需要去适配这个型号的用户的,查找了错误描述。heuser10553doesnotmeettherequirementstoaccessdeviceidentifiers.通过查看GoogleAndroid开发者官方文档《唯一标识符最佳做法》发现自Android10(API级别29)起,您的应用必须是设备或
- Wav文件格式
昉钰
多媒体WavAndroid
目录1、文件整体结构1.1RIFFChunk块1.2FormatChunk区块1.3DATA块1.4文件示例分析2、Android上Wav录制2.1首先初始化AudioRecord(忽略权限相关代码):2.2启动录制2.3格式转换(Wav)3、参考文章1、文件整体结构WAV文件的数据体区块一般由3个区块组成:RIFFChunk、FormatChunk和DataChunk。如上图三个不同颜色区域。1
- android服务的启动过程,Android Service启动流程
weixin_39968640
android服务的启动过程
一、Service生命周期首先我们先回忆一下Service的声明周期image第一次调用startServie():Service.onCreate()->Service.onStartCommand()第二次调用startService():Service.onStartCommand()本周主要分析上面两步操作,Service的启动行为。二、Service启动分析image阶段一:app进程s
- Android为什么要从Java改用Kotlin
彬sir哥
Androidkotlin入门到进阶系列讲解androidandroidstudiojavakotlin
<<返回总目录文章目录一、Kotlin1、Kotlin是来自哪个公司2、为什么要学习Kotlin二、Android的Kotlin优先方法1、为什么要优先使用Kotlin进行Android开发?2、Kotlin优先意味着什么?一、Kotlin1、Kotlin是来自哪个公司kotlin是来自JetBrains公司2、为什么要学习Kotlin市场上大部分代码都是kotlin了,没办法有些项目组件不切an
- Android Service 启动流程
&岁月不待人&
Android新认知android
在早些年学习Android的时候,对Service有过总结,但是主要是如何去使用,注意事项,startService和bindService的区别。AndroidService_publicintonstartcommand(intentintent,intflags-CSDN博客但是今天从源码来总结下framework层的启动流程大致是什么样的。一、startService()平时,在我们的ac
- Jetpack架构组件学习——使用Glance实现桌面小组件
工业甲酰苯胺
架构学习gitee
基本使用1.添加依赖添加Glance依赖://ForAppWidgetssupportimplementation"androidx.glance:glance-appwidget:1.1.0"//ForinteropAPIswithMaterial3implementation"androidx.glance:glance-material3:1.1.0"//ForinteropAPIswith
- 安卓图形化开发!Android插件化主流框架和实现原理,值得收藏!
赵是水瓶座
程序员Android
前言先介绍一下自己吧,不是什么二本渣校也不是什么非专业。我就是重点大学毕业,大学学的是Java,我个人比较乐于学习于是自学Android一年。趁着这次疫情,大洗牌我凭借天生优势,——聪明的脑袋以及自己不断地刻苦的学习,在一众高手之中成功脱颖而出。现在网上都喜欢这么搞,哪有这么多二本渣校逆袭。年薪50w+都是吹出来的,只有你正真拿到年薪50w+你才知道,你要做多少事,付出多少。目录:1.网络2.Ja
- 2024 年,如何在React Native 中设置 Google 广告
将GoogleAds集成到你的ReactNative应用程序中是通过广告来盈利的极佳方式。本指南将指导使用react-native-google-mobile-ads包设置GoogleAds,该包支持Android和iOS平台。开始之前,请确保你有以下内容:一个ReactNative项目的设置。对ReactNative开发的基础知识。一个GoogleAdMob账户以及Android和iOS的广告单
- 踩坑热修复框架Tinker
小蜗牛在漫步
Tinker是什么Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。为什么使用Tinker当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案。但它们都存在无法解决的问题,这也是正是使用Tinker的原因。总的来
- android 地铁地图api,利用高德地图api绘制公交+地铁的等时圈
中本姜
android地铁地图api
等时圈是指从某点出发,以某种交通方式在特定时间内能到达的距离覆盖的范围,在可达性分析中十分常见。原本我们需要将地图栅格化不停地调用路径规划api来获得等时圈,现在已经有网站为我们做好了这些工作,比如https://docs.mapbox.com/playground/isochrone/。我们只需要选择交通方式(步行、骑行和驾车),和需要绘制的时间即可,但是比较遗憾的是无法获取公交(地铁/地铁+公
- 用C在安卓手机上开发
zhumin726
c语言安卓
在安卓手机上进行C语言开发需要一些特定的工具和设置。通常,C语言用于编写安卓的底层代码,如性能关键的模块或与硬件直接交互的部分。我们可以使用AndroidNDK(NativeDevelopmentKit)来开发这些部分。以下是如何在安卓手机上使用C进行开发的详细步骤。工具和环境配置1.安装TermuxTermux是一个Android终端仿真器,可以让您在Android设备上运行Linux环境。我们
- Linux-Ubuntu入门笔记
LeoJamLin
linuxlinux
一.linux操作系统概述1.常见操作系统-服务端操作系统:linux、unix、windowsserver-单机操作系统:windows(dos、ucdos、win95、win98、win2000、xp、vista、win7、win8)MAC、linux(ubuntu)-移动操作系统Android、IOS、Windowsphone2.linux操作系统介绍-为什么要学习linux操作系统1.大部
- Android深入浅出之Binder机制
Fifi_0617
系统服务androidbinder机制
Binder于底层实现,是用的共享内存。实现了一个叫binder驱动的东西,这个binder驱动维护了一映射机制,其实就是一个hash表,用来将各个binder与相对应的进程和相关的线程信息维护起来。简单的来说,就是通过一个handle找到对应的binder,从而建立对应的进程间的联系。handle在这里就是类似ip的一个东西,用来找到通讯的对象的。其实从上层的角度来看,我们不需要去关注binde
- RK3568平台(基础篇)GKI开发方式
嵌入式_笔记
瑞芯微linux
一.什么是GKIGKI:GenericKernelImage通用内核映像。Android13GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像,是google为了解决内核碎片化的问题,而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加载模块中。核心内核为驱动模块提供了稳定的内核模块接口,模块驱动和核心内核可以独立进行更新。内核接口可以通过upstr
- android opengl纹理,Android OpenGL透明纹理绘制黑色
丛子涵
androidopengl纹理
我试图在我的应用程序中绘制透明纹理(文本).奇怪的是,它适用于最新的Nexus7和我的第二代MotoX,但在原来的Nexus7上,纹理只是黑色.我已经启用了混合,纹理是512×512,所以它不是两个问题.我也只是使用GL10,应该支持一切,对吧?任何原因纹理不会在这个设备上工作?gl.glEnable(GL10.GL_BLEND);gl.glBlendFunc(GL10.GL_SRC_ALPHA,
- Android 13 和 Android 13 QPR 版本说明
华南烹鱼宴
AndroidAOSPandroid
架构对通用启动分区的更改对于发布时搭载Android13的设备,通用ramdisk将从boot映像中移除,并放置在单独的init_boot映像中。如需了解详情,请参阅通用boot分区。GKI模块在Android13中,一些内核功能在动态可加载模块(称为GKI模块)中提供,以减少不需要该功能的设备中的GKI内核内存占用。如需了解详情,请参阅内核模块。模块化系统组件Android13包含几个新增的和经
- Android 逆向之 Uni Debug 全面解析
阿贾克斯的黎明
逆向
目录Android逆向之UniDebug全面解析一、UniDebug概述(一)Unicorn框架(二)UniDebug简介二、UniDebug的使用场景、优缺点(一)使用场景(二)优点(三)缺点三、UniDebug的使用步骤(一)配置资源文件(二)文件结构解析(三)案例分析与代码示例四、UniDebug的API介绍(一)Emulator常用API(二)内存常用API(三)VN常用API五、UniD
- Android openGL渲染图片纹理
toblyn
工作学习android
使用openGL渲染图片纹理,需要特别注意纹理坐标问题:openGL纹理坐标原点在左下角,Android中坐标系原点在左上角,即openGL纹理坐标与Android坐标系在Y轴恰好相反。因此在纹理采样时,按照openGL纹理坐标采样,则Android窗体中显示时会出现上下翻转的问题,未解决此问题,可以在采样阶段将openGL纹理坐标上下翻转,最终采样结束在窗体可以正常显示。(个人理解)顶点着色器a
- Kotlin开发(一):Google 亲儿子 Kotlin 到底有多香?看完你就懂了
刘争Stanley
Kotlin编程探索之旅androidkotlin开发语言
引言在这个技术更新日新月异的时代,Android开发者们对编程语言的选择尤为重要。Kotlin,这个名字听起来像某种北欧神话武器,但其实是Google推崇的安卓开发神器。它不仅让代码更简洁优雅,还能帮你摆脱“Bug狂魔”的称号。作为一名Android开发者,如果还没用过Kotlin,那简直就是错过了一个亿!今天这篇文章,就带你从零到一,全面解析为什么Kotlin是Android开发的首选语言。一、
- ASM系列四 利用Method 组件动态注入方法逻辑
lijingyao8206
字节码技术jvmAOP动态代理ASM
这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以
- java编程思想 --内部类
百合不是茶
java内部类匿名内部类
内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
1,内部类的创建 内部类是创建在类中的
package com.wj.InsideClass;
/*
* 内部类的创建
*/
public class CreateInsideClass {
public CreateInsideClass(
- web.xml报错
crabdave
web.xml
web.xml报错
The content of element type "web-app" must match "(icon?,display-
name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,s
- 泛型类的自定义
麦田的设计者
javaandroid泛型
为什么要定义泛型类,当类中要操作的引用数据类型不确定的时候。
采用泛型类,完成扩展。
例如有一个学生类
Student{
Student(){
System.out.println("I'm a student.....");
}
}
有一个老师类
- CSS清除浮动的4中方法
IT独行者
JavaScriptUIcss
清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近。CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受。
1、结尾处加空div标签 clear:both 1 2 3 4
.div
1
{
background
:
#000080
;
border
:
1px
s
- Cygwin使用windows的jdk 配置方法
_wy_
jdkwindowscygwin
1.[vim /etc/profile]
JAVA_HOME="/cgydrive/d/Java/jdk1.6.0_43" (windows下jdk路径为D:\Java\jdk1.6.0_43)
PATH="$JAVA_HOME/bin:${PATH}"
CLAS
- linux下安装maven
无量
mavenlinux安装
Linux下安装maven(转) 1.首先到Maven官网
下载安装文件,目前最新版本为3.0.3,下载文件为
apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令;
2.进入下载文件夹,找到下载的文件,运行如下命令解压
tar -xvf apache-maven-2.2.1-bin.tar.gz
解压后的文件夹
- tomcat的https 配置,syslog-ng配置
aichenglong
tomcathttp跳转到httpssyslong-ng配置syslog配置
1) tomcat配置https,以及http自动跳转到https的配置
1)TOMCAT_HOME目录下生成密钥(keytool是jdk中的命令)
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit
- 关于领号活动总结
alafqq
活动
关于某彩票活动的总结
具体需求,每个用户进活动页面,领取一个号码,1000中的一个;
活动要求
1,随机性,一定要有随机性;
2,最少中奖概率,如果注数为3200注,则最多中4注
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高);
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库)
解决方案
1,事先产生随机数1000个,并打
- java数据结构 冒泡排序的遍历与排序
百合不是茶
java
java的冒泡排序是一种简单的排序规则
冒泡排序的原理:
比较两个相邻的数,首先将最大的排在第一个,第二次比较第二个 ,此后一样;
针对所有的元素重复以上的步骤,除了最后一个
例题;将int array[]
- JS检查输入框输入的是否是数字的一种校验方法
bijian1013
js
如下是JS检查输入框输入的是否是数字的一种校验方法:
<form method=post target="_blank">
数字:<input type="text" name=num onkeypress="checkNum(this.form)"><br>
</form>
- Test注解的两个属性:expected和timeout
bijian1013
javaJUnitexpectedtimeout
JUnit4:Test文档中的解释:
The Test annotation supports two optional parameters.
The first, expected, declares that a test method should throw an exception.
If it doesn't throw an exception or if it
- [Gson二]继承关系的POJO的反序列化
bit1129
POJO
父类
package inheritance.test2;
import java.util.Map;
public class Model {
private String field1;
private String field2;
private Map<String, String> infoMap
- 【Spark八十四】Spark零碎知识点记录
bit1129
spark
1. ShuffleMapTask的shuffle数据在什么地方记录到MapOutputTracker中的
ShuffleMapTask的runTask方法负责写数据到shuffle map文件中。当任务执行完成成功,DAGScheduler会收到通知,在DAGScheduler的handleTaskCompletion方法中完成记录到MapOutputTracker中
- WAS各种脚本作用大全
ronin47
WAS 脚本
http://www.ibm.com/developerworks/cn/websphere/library/samples/SampleScripts.html
无意中,在WAS官网上发现的各种脚本作用,感觉很有作用,先与各位分享一下
获取下载
这些示例 jacl 和 Jython 脚本可用于在 WebSphere Application Server 的不同版本中自
- java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句
bylijinnan
switch
借鉴网上的思路,用java实现:
public class NoIfWhile {
/**
* @param args
*
* find x=1+2+3+....n
*/
public static void main(String[] args) {
int n=10;
int re=find(n);
System.o
- Netty源码学习-ObjectEncoder和ObjectDecoder
bylijinnan
javanetty
Netty中传递对象的思路很直观:
Netty中数据的传递是基于ChannelBuffer(也就是byte[]);
那把对象序列化为字节流,就可以在Netty中传递对象了
相应的从ChannelBuffer恢复对象,就是反序列化的过程
Netty已经封装好ObjectEncoder和ObjectDecoder
先看ObjectEncoder
ObjectEncoder是往外发送
- spring 定时任务中cronExpression表达式含义
chicony
cronExpression
一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示:
代表含义 是否必须 允许的取值范围 &nb
- Nutz配置Jndi
ctrain
JNDI
1、使用JNDI获取指定资源:
var ioc = {
dao : {
type :"org.nutz.dao.impl.NutDao",
args : [ {jndi :"jdbc/dataSource"} ]
}
}
以上方法,仅需要在容器中配置好数据源,注入到NutDao即可.
- 解决 /bin/sh^M: bad interpreter: No such file or directory
daizj
shell
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具
- [转]for 循环为何可恨?
dcj3sjt126com
程序员读书
Java的闭包(Closure)特征最近成为了一个热门话题。 一些精英正在起草一份议案,要在Java将来的版本中加入闭包特征。 然而,提议中的闭包语法以及语言上的这种扩充受到了众多Java程序员的猛烈抨击。
不久前,出版过数十本编程书籍的大作家Elliotte Rusty Harold发表了对Java中闭包的价值的质疑。 尤其是他问道“for 循环为何可恨?”[http://ju
- Android实用小技巧
dcj3sjt126com
android
1、去掉所有Activity界面的标题栏
修改AndroidManifest.xml 在application 标签中添加android:theme="@android:style/Theme.NoTitleBar"
2、去掉所有Activity界面的TitleBar 和StatusBar
修改AndroidManifes
- Oracle 复习笔记之序列
eksliang
Oracle 序列sequenceOracle sequence
转载请出自出处:http://eksliang.iteye.com/blog/2098859
1.序列的作用
序列是用于生成唯一、连续序号的对象
一般用序列来充当数据库表的主键值
2.创建序列语法如下:
create sequence s_emp
start with 1 --开始值
increment by 1 --増长值
maxval
- 有“品”的程序员
gongmeitao
工作
完美程序员的10种品质
完美程序员的每种品质都有一个范围,这个范围取决于具体的问题和背景。没有能解决所有问题的
完美程序员(至少在我们这个星球上),并且对于特定问题,完美程序员应该具有以下品质:
1. 才智非凡- 能够理解问题、能够用清晰可读的代码翻译并表达想法、善于分析并且逻辑思维能力强
(范围:用简单方式解决复杂问题)
- 使用KeleyiSQLHelper类进行分页查询
hvt
sql.netC#asp.nethovertree
本文适用于sql server单主键表或者视图进行分页查询,支持多字段排序。KeleyiSQLHelper类的最新代码请到http://hovertree.codeplex.com/SourceControl/latest下载整个解决方案源代码查看。或者直接在线查看类的代码:http://hovertree.codeplex.com/SourceControl/latest#HoverTree.D
- SVG 教程 (三)圆形,椭圆,直线
天梯梦
svg
SVG <circle> SVG 圆形 - <circle>
<circle> 标签可用来创建一个圆:
下面是SVG代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" c
- 链表栈
luyulong
java数据结构
public class Node {
private Object object;
private Node next;
public Node() {
this.next = null;
this.object = null;
}
public Object getObject() {
return object;
}
public
- 基础数据结构和算法十:2-3 search tree
sunwinner
Algorithm2-3 search tree
Binary search tree works well for a wide variety of applications, but they have poor worst-case performance. Now we introduce a type of binary search tree where costs are guaranteed to be loga
- spring配置定时任务
stunizhengjia
springtimer
最近因工作的需要,用到了spring的定时任务的功能,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,在此记录一下,以便以后用到:
//------------------------定时任务调用的方法------------------------------
/**
* 存储过程定时器
*/
publi
- ITeye 8月技术图书有奖试读获奖名单公布
ITeye管理员
活动
ITeye携手博文视点举办的8月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
8月试读活动回顾:
http://webmaster.iteye.com/blog/2102830
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《跨终端Web》
gleams:http