是非亦航.iegss

------人生如夢,“是”亦航,“非”亦航。

Android仿京东商城客户端底部菜单效果实现

界面截图

 

 

示例扫描安装

示例源代码下载

原创文章如转载,请注明:转载自是非亦航博客

APK反编译流程

十二 2011
Android, Java    (24 views)

一. 反编译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,在选项里禁止分页,则无需设置上面的选项。

flex4+xml 加载swf轮播

2011
Flex    (366 views)

最近帮客户做个商城网,需要做个加载外部swf轮播广告,就用flex4开发了一个测试版。

查看Demo

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 源码如下:

?View Code ACTIONSCRIPT
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同步实现插件

2010
PHP    (611 views)

在CI中与ucenter同步实现插件

ucenter不同域同步登录退出原理

同步的根本原理是通过设置p3p头来实现跨域访问,而ucenter只是一个用户和应用程序(不同域下的程序)管理中心,她负责用户的统一管理,和用户动作(如同步登录)通知各应用程序的代码生成。

如下图ucenter登录简单过程

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简单实例

十二 2009
Flex    (804 views)

 PV3D技术要领:
      一.初始代3D场景4要素(窗口,场景,摄像机,渲染器);
      二.创建3D帖图对象;
      三.把窗口加入的stage里;
      四.把3D对象加入到场景中;
      五.渲染

实例一:3D地球(点击查看实例动画效果)
         注:在查看实例动画时鼠标可手动地球

   实例截图

实例二:外部导入3D人物dae模型(点击查看实例动画效果)

实例截图

实例源码包下载

原创文章如转载,请注明:转载自是非亦航博客

 

提取UC_Home中的邀请功能

十一 2009
PHP    (379 views)

         前段时间在开发个性印品的系统中,客户要一个邀请功能,也就是能在网站上给我已有的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发邮件

相关界面图如下:

12

13

原创文章如转载,请注明:转载自是非亦航博客

为何而博?

十一 2009
Uncategorized    (365 views)

         去年的这个时候,为赶时髦我也开了博,但一直没有去更新,就草草结束。的确,懒是一个重要原因。但更主要的,是我不曾明白我的Blog究竟要写点什么。
         读中学时,我是一个从不记课堂笔记的学生,我喜欢在课后拿同学的看,把自认为要重要的再抄在自己的本子上,邻考前拿来再看看。到上大学的时候,只要有老师在我就不会拿出笔来(当然除了考试,呵呵!),我通常把我不明白的内容从google上找出来,并以文本方式存在计算机中,随着时间的推移发现文件越来越多,就找了个文本管理软件来(软件名myBase Desktop),由于只有自己在看,不需要对读者负责,通常我会随便写点东西,写得很“散漫”,也不太系统。记得刚开博时我也是那样,写得只有自己看得明白,这样它就得不到分享,也失去了开博的意义。

如何使数据库中二表二字段数据相一致?
如:
A表中有字段 money
B表中也有字段 money
不管我update那个表都能使A,B两表中的money相等
continue reading…

使ecshop的png缩略图透明

2008
PHP    (480 views)

在做ecshop二次开发时,由于项目的需要,png图的缩略图要求透明。
修改 cls_image.php 中的make_thumb函数
continue reading…