一. 反编译apk获取资源文件:
1. 工具下载:
APKTOOL的JAR包及相应环境下工具:http://code.google.com/p/android-apktool/downloads/list
2. 反编译:
(1)APKTOOJAR包和工具,放入同一目录下。
(2)进入命令窗口进入到apktool的文件夹。执行:apktool d 源apk文件.apk 目标文件夹
二. 反编译apk获取Java源码:
1. 工具下载:
(1)DEX2JAR: http://code.google.com/p/dex2jar/downloads/list
(2)jar2java工具: JD-GUI (http://java.decompiler.free.fr/?q=jdgui)或 xJad
2. 反编译:
(1) 用解压缩软件打开jar文件, 得到其中的classes.dex文件,它就是由java文件编译后再通过dx工具打包而成。
(2)把classes.dex拷贝到dex2jar.sh所在目录下。 运行 ./dex2jar.sh classes.dex,生成classes.dex.dex2jar.jar文件。
(3)运行JD-GUI工具,打开上面的jar文件,即可看到源代码。
改一下配置就可以基本解决:
1、etc\gitconfig:
[gui]
encoding = utf-8
[i18n]
commitencoding = gbk
[svn]
pathnameencoding = gbk
说明:打开 Git 环境中的中文支持。pathnameencoding设置了文件路径的中文支持。
2、etc\git-completion.bash:
alias ls='ls --show-control-chars --color=auto'
说明:使得在 Git Bash 中输入 ls 命令,可以正常显示中文文件名。
3、etc\inputrc:
set output-meta on set convert-meta off
说明:使得在 Git Bash 中可以正常输入中文,比如中文的 commit log。
4、etc\profile:
export LESSCHARSET=iso8859 #或者utf-8、gbk
说明:$ git log 命令不像其它 vcs 一样,n 条 log 从头滚到底,它会恰当地停在第一页,按 space 键再往后翻页。这是通过将 log 送给 less 处理实现的。以上即是设置 less 的字符编码,使得 $ git log 可以正常显示中文。其实,它的值不一定要设置为 utf-8,比如 latin1 也可以……。还有个办法是 $ git –no-pager log,在选项里禁止分页,则无需设置上面的选项。
最近帮客户做个商城网,需要做个加载外部swf轮播广告,就用flex4开发了一个测试版。
xml 格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?xml version="1.0" encoding="utf-8"?> <data> <category> <item> <ptime>5</ptime> <pstyle>flash</pstyle> <link>http://www.iegss.cn</link> <pmedia>assets/back2.png</pmedia> <title>标题1</title> <timage>assets/list.png</timage> </item> <item> <ptime>10</ptime> <pstyle>flash</pstyle> <link>http://www.iegss.cn</link> <pmedia>you.swf</pmedia> <title>标题2</title> <timage>assets/list.png</timage> </item> <item> <ptime>10</ptime> <pstyle>flash</pstyle> <link>http://www.iegss.cn</link> <pmedia>test.png</pmedia> <title>标题3</title> <timage>assets/list.png</timage> </item> <item> <ptime>5</ptime> <pstyle>flash</pstyle> <link>http://www.iegss.cn</link> <pmedia>assets/c2.png</pmedia> <title>标题4</title> <timage>assets/list.png</timage> </item> </category> </data> |
Flex 源码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="960" height="430" applicationComplete="fssInit(event)" xmlns:local="*" preloader="cn.iegss.components.MyDownloadProgressBar" xmlns:components="cn.iegss.components.*" > <fx:Style source="style.css"/> <fx:Script> <![CDATA[ import model.ModelLocator; import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.events.FlexEvent; import vo.FSSItem; [Bindable] public var pmedia:String = ""; [Bindable] public var plink:String = ""; [Bindable] public var modelsing:ModelLocator = ModelLocator.getInstance(); [Bindable] public var totalPages:Number; [Bindable] public var currentPage:Number = 1; [Bindable]private var fssList:ArrayCollection = new ArrayCollection(); private var set_time_id:int; [Embed(source="assets/source.swf",symbol="LoadingMc2")] private var loadingImg:Class; [Bindable] public var imgData:DisplayObject = new loadingImg() as DisplayObject; protected function fssInit(event:FlexEvent):void { var XML_URL:String = "fssiegss.xml"; var parame_xml:Boolean = false; //Alert.show(this.loaderInfo.parameters.xml); if (loaderInfo.parameters["xml"]) { var xmlStr:* = replaceHat(String(loaderInfo.parameters["xml"])); var dataXml:XML = new XML(xmlStr); //Alert.show(xmlStr); if (dataXml.category.item.length() > 0) { parame_xml = true; startFss(dataXml); }else if(xmlStr != null){ XML_URL = xmlStr; } } if(!parame_xml){ var fssXMLURL:URLRequest = new URLRequest(XML_URL); var fssLoader:URLLoader = new URLLoader(fssXMLURL); fssLoader.addEventListener("complete", xmlLoaded); function xmlLoaded(event:Event):void { var fssXML:XML = new XML(); fssXML = XML(fssLoader.data); startFss(fssXML); } } plist.scroller.setStyle('horizontalScrollPolicy', 'off'); plist.scroller.setStyle('verticalScrollPolicy', 'on'); //设置滚动控件的垂直滚动条的滚动样式 plist.scroller.verticalScrollBar.setStyle('smoothScrolling', true);//设置为平滑滚动 plist.scroller.verticalScrollBar.setStyle('repeatInterval', 500);//设置滚动到指定点的经过的时间 //fplayer.content.addEventListener("SWF_EVENT",ballHandler); } private function ballHandler(ev:Event):void{ } private function startFss(fssXML:XML):void{ var i:int = 1; for each (var item:XML in fssXML.category.item) { var fssitem:FSSItem = new FSSItem(); fssitem.ptime = item.ptime; fssitem.pstyle = item.pstyle; fssitem.link = item.link; fssitem.pmedia = item.pmedia; fssitem.ptitle = item.title; fssitem.timage = item.timage; fssitem.item_index = i++; modelsing.fss_array.push(fssitem); fssList.addItem(fssitem); trace(fssitem.pmedia + '=' + fssitem.item_index); } trace(fssList.length); changePmediaObj(fssList[0]); totalPages = Math.ceil(plist.scroller.viewport.contentHeight/plist.scroller.verticalScrollBar.pageSize); } private function changePmediaObj(fssitem:FSSItem):void{ var flist_len:int = fssList.length; var next_fssitem:FSSItem; //this.plist.itemSelected(1); plist.selectedIndex = fssitem.item_index - 1; plink = fssitem.link; for each (var item:FSSItem in fssList) { if(fssitem.item_index == item.item_index){ this.pmedia = fssitem.pmedia; } if(fssitem.item_index + 1 <= flist_len){ if(fssitem.item_index + 1 == item.item_index)next_fssitem = item; }else{ next_fssitem = fssList[0]; } } //Alert.show('changePmediaObj-' + fssitem.item_index + ', plist.selectedIndex = ' + plist.selectedIndex + ', ' + next_fssitem.item_index + '- next'); clearTimeout(set_time_id); //transformer.play(); set_time_id = setTimeout(changePmediaObj,fssitem.ptime * 1000, next_fssitem); plist.scroller.verticalScrollBar.changeValueByPage(true); } public function prevPageHandler():void { if(currentPage == 1) return ; currentPage--; //上一页 plist.scroller.verticalScrollBar.changeValueByPage(false); } public function nextPageHandler():void { if(currentPage == totalPages) return; currentPage++; //下一页 plist.scroller.verticalScrollBar.changeValueByPage(true); trace('asdfsadf'); } protected function fplayer_completeHandler(event:Event):void{ loader_img.visible=false; trace('fplayer_completeHandler'); } protected function fplayer_progress(event:Event):void{ loader_img.visible=true; trace('fplayer_progress'); } public function click_item(fssitem:FSSItem):void{ //Alert.show('click_item' + fssitem.item_index); clearTimeout(set_time_id); changePmediaObj(fssitem); } protected function fplayer_clickHandler(event:MouseEvent):void { navigateToURL(new URLRequest(plink),'_blank'); } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <s:Parallel id="transformer" target="{fplayer}"> <s:Rotate3D autoCenterTransform="true" angleXFrom="0" angleXTo="360" angleYFrom="0" angleYTo="0" duration="1000" /> </s:Parallel> </fx:Declarations> <components:myBorderContainer x="0" y="0" width="680" height="430" borderVisible="false"> <mx:SWFLoader x="0" y="0" width="100%" height="100%" source="{pmedia}" id="fplayer" progress="fplayer_progress(event)" complete="fplayer_completeHandler(event)" click="fplayer_clickHandler(event)" toolTip="{'点击进入'}" /> <mx:Image id="loader_img" source="{imgData}" x="311" y="161" width="50" height="50"/> </components:myBorderContainer> <s:List x="682" y="0" width="275" height="430" id="plist" dataProvider="{fssList}" itemRenderer="fsslistItem" enabled="true" styleName="listcss" borderVisible="false"> <s:layout> <s:TileLayout horizontalGap="3" verticalGap="3"/> </s:layout> </s:List> </s:Application> |
在CI中与ucenter同步实现插件
ucenter不同域同步登录退出原理
同步的根本原理是通过设置p3p头来实现跨域访问,而ucenter只是一个用户和应用程序(不同域下的程序)管理中心,她负责用户的统一管理,和用户动作(如同步登录)通知各应用程序的代码生成。
如下图ucenter登录简单过程
应用程序是php的话就可以直接用ucenter带的客户端,如果你是java,asp的话就要自己按照ucenter的加密方式和接口参数自己写咯,这里以ucenter自带的客户端为列
1, 登录 (用到的函数 uc_user_login) ,如果登录成功生成同步登录js代码(用到的函数uc_user_synlogin),js代码如:<script src=”http://www.a.com/index.php/api/uc.php?time=1286877098&code=加密后的数据” reload=”1″>,
2, 将生成的js代码嵌入到html中,向所有程序发送登录信息
3, 各应用程序解密code ,更新相应用户的登录的session及cookie
插件使用说明 (插件下载)
1. 插件对应ucenter 版本 1.5.2
2. ucenter 中应用设置注意
a. 应用的主 URL: http://www.a.com/index.php (如果你的ci程序有启url重写可以不要”/index.php”)
b. 应用接口文件名称: uc (注意不是uc.php哦)
3. 设置后,将config.inc.php 中的内容换成 ucenter 中 “应用的 UCenter 配置信息”中的内容。
4.修改api.php 中的相关处理函数。
如:
a. 登录函数
function synlogin($get, $post) {
$uid = $get['uid'];
$username = $get['username'];
if(!API_SYNLOGIN) {
return API_RETURN_FORBIDDEN;
}
header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);
/*你站点的登录处理,通常记录用户登录session*/
}
b.退出函数
function synlogout($get, $post) {
if(!API_SYNLOGOUT) {
return API_RETURN_FORBIDDEN;
}
header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);
/*你站点的登出处理,通常删除用户登录session*/
$this->CI->session->sess_destroy();
}
原创文章如转载,请注明:转载自是非亦航博客
PV3D技术要领:
一.初始代3D场景4要素(窗口,场景,摄像机,渲染器);
二.创建3D帖图对象;
三.把窗口加入的stage里;
四.把3D对象加入到场景中;
五.渲染
实例一:3D地球(点击查看实例动画效果)
注:在查看实例动画时鼠标可手动地球
实例截图
实例二:外部导入3D人物dae模型(点击查看实例动画效果)
实例截图

实例源码包下载
原创文章如转载,请注明:转载自是非亦航博客
前段时间在开发个性印品的系统中,客户要一个邀请功能,也就是能在网站上给我已有的QQ、MSN等中的好友发送邀请邮件。本想自己写一个的,突然想起在做uc_home的二次开发中用到这个功能,于是想想应该可以把这个功能单独提取出来。
提取方法如下:
1.在页面中包含js及设置form相关提交参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <div>
<script src="http://widgets.manyou.com/misc/scripts/ab.js" type="text/javascript"><!--mce:0--></script>
<h5><span>给好友发送 Email 邀请</span></h5>
<form action="user.php" enctype="multipart/form-data" method="post">
<table class="formtable" border="0" cellspacing="0" cellpadding="0" width="100%">通过Email发送邮件的方式,邀请你的好友。多个Email使用","分割。
<tbody>
<tr>
<td height="132">
<div class="f_r"><a onclick="MYABC.showChooser('email', '/api/getmaillist.htm', null, false, false, null); return false" href="#"><img style="MARGIN: 5px 0px 0px" src="images/ab_button.gif" alt="从地址簿添加" /></a></div>
<div>好友Email地址</div>
<textarea id="email" style="width: 99%;" cols="20" rows="5" name="email"></textarea></td>
</tr>
<tr>
<td height="32" align="left" valign="middle">邀请主题 : <input id="subject" style="width: 500px;" maxlength="100" name="subject" type="text" value="好友***,邀请您加入**网" /></td>
</tr>
<tr>
<td height="140">想对好友说的话 <textarea id="saymsg" style="width: 99%;" cols="20" rows="8" name="saymsg">(在些写入你要和好友说的话)
请你点击以下链接,接受好友邀请: http://www.***.com/ </textarea></td>
</tr>
<tr>
<td height="44"><input name="act" type="hidden" value="send_invite_mail" /> <input class="submit" name="emailinvite" type="submit" value="邀请" /></td>
</tr>
<tr>
<td> </td>
</tr>
</tbody></table>
</form></div> |
2.设置调用页的目录
getmaillist.htm
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=gbk”>
<script type=”text/javascript” src=”http://widgets.manyou.com//misc/scripts/ab.js” charset=”utf-8″></script>
</head>
<body onload=”onCBPageLoad()”>
</body>
</html>
3. 调用showChooser ,向manyou发送数据
onclick=”MYABC.showChooser(‘email’, ‘/api/getmaillist.htm’, null, false, false, null); return false”
<TEXTAREA id=email style=”WIDTH: 99%” name=email rows=5></TEXTAREA>
4, id=email 中得到如:123@live.cn,12312@live.cn
5,php分解id=email 中的值,为每个 email发邮件
相关界面图如下:
原创文章如转载,请注明:转载自是非亦航博客
去年的这个时候,为赶时髦我也开了博,但一直没有去更新,就草草结束。的确,懒是一个重要原因。但更主要的,是我不曾明白我的Blog究竟要写点什么。
读中学时,我是一个从不记课堂笔记的学生,我喜欢在课后拿同学的看,把自认为要重要的再抄在自己的本子上,邻考前拿来再看看。到上大学的时候,只要有老师在我就不会拿出笔来(当然除了考试,呵呵!),我通常把我不明白的内容从google上找出来,并以文本方式存在计算机中,随着时间的推移发现文件越来越多,就找了个文本管理软件来(软件名myBase Desktop),由于只有自己在看,不需要对读者负责,通常我会随便写点东西,写得很“散漫”,也不太系统。记得刚开博时我也是那样,写得只有自己看得明白,这样它就得不到分享,也失去了开博的意义。
如何使数据库中二表二字段数据相一致?
如:
A表中有字段 money
B表中也有字段 money
不管我update那个表都能使A,B两表中的money相等
continue reading…
在做ecshop二次开发时,由于项目的需要,png图的缩略图要求透明。
修改 cls_image.php 中的make_thumb函数
continue reading…