??xml version="1.0" encoding="utf-8" standalone="yes"?>免费人成在线观看网站,欧洲中文字幕精品,亚洲视频精选http://www.aygfsteel.com/vagasnail/category/48272.htmld双Ӏ看说、写E序都是我所爱。技术不好,头脑不灵光,靠的是兴?/description>zh-cnMon, 12 Mar 2012 22:14:00 GMTMon, 12 Mar 2012 22:14:00 GMT60Android五子算法简单实?/title><link>http://www.aygfsteel.com/vagasnail/archive/2012/03/06/371325.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Tue, 06 Mar 2012 04:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/vagasnail/archive/2012/03/06/371325.html</guid><wfw:comment>http://www.aygfsteel.com/vagasnail/comments/371325.html</wfw:comment><comments>http://www.aygfsteel.com/vagasnail/archive/2012/03/06/371325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/vagasnail/comments/commentRss/371325.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/vagasnail/services/trackbacks/371325.html</trackback:ping><description><![CDATA[<div> <p style="background-color: #fafafa; font-family: Verdana, K�K�">有一天在|上看到一个Android的五子棋Q该E序的作者的GoogleTalk: lixinso@gmail.com。遂下蝲下来看看Q可以下,但是没有实现电脑下棋法Q所以我一时兴赯了几个小时加了个电脑下棋法在里面,很简单。原作者的游戏l制׃多说了,主要讲电脑下算法?/p> <p style="background-color: #fafafa; font-family: Verdana, K�K�">1、准备一个数l表C当前棋盘,另外准备两个数组分别保存电脑和玩家每个可下点的坐标及其分?型数组)Q每个可下点包括4个方向的分数Q分别是横、竖、左斜、右斜?br /></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span>[][] mChessTable = <span style="color: #0000ff">new</span> <span style="color: #0000ff">int</span>[CHESS_GRID][CHESS_GRID]; <span style="color: #008000">//</span><span style="color: #008000"> |格</span><span style="color: #008000"><br /></span><br />    <span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span>[][][] computerTable = <span style="color: #0000ff">new</span> <span style="color: #0000ff">int</span>[CHESS_GRID][CHESS_GRID][CHECK_DIR]; <span style="color: #008000">//</span><span style="color: #008000"> 电脑Ş?/span><span style="color: #008000"><br /></span>    <span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span>[][][] playerTable = <span style="color: #0000ff">new</span> <span style="color: #0000ff">int</span>[CHESS_GRID][CHESS_GRID][CHECK_DIR]; <span style="color: #008000">//</span><span style="color: #008000"> 电脑Ş?br /></span></div> <p> <span style="background-color: #fafafa; font-family: Verdana, K�K�">2、每个可下点?个方向分数判断,每个方向取当前点左右每边5个棋点的状态,然后分析它们是否构成五连、活四、活三等Q每U棋型给予不同的分数?/span><span style="background-color: #eeeeee; color: #008080; font-size: 13px">  1</span><span style="background-color: #eeeeee; font-size: 13px"> </span><span style="background-color: #eeeeee; color: #008000; font-size: 13px">//</span><span style="background-color: #eeeeee; color: #008000; font-size: 13px"> -------------------------------------------------------------</span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px; border-image: initial"><span style="color: #008080">  2</span> <span style="color: #008000"></span>    <span style="color: #008000">/**</span><span style="color: #008000"><br /></span><span style="color: #008080">  3</span> <span style="color: #008000">     * 分析存在五连<br /></span><span style="color: #008080">  4</span> <span style="color: #008000">     * <br /></span><span style="color: #008080">  5</span> <span style="color: #008000">     * </span><span style="color: #808080">@param</span><span style="color: #008000"> tmpChess<br /></span><span style="color: #008080">  6</span> <span style="color: #008000">     </span><span style="color: #008000">*/</span><br /><span style="color: #008080">  7</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">boolean</span> analyzeWulian(<span style="color: #0000ff">int</span>[] tmpChess, <span style="color: #0000ff">int</span> isWho) {<br /><span style="color: #008080">  8</span>         <span style="color: #0000ff">int</span> count = 0;<br /><span style="color: #008080">  9</span>         <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i < HALF_LEN; i++) {<br /><span style="color: #008080"> 10</span>             <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN - (i + 1)] == isWho) {<br /><span style="color: #008080"> 11</span>                 count++;<br /><span style="color: #008080"> 12</span>             } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 13</span>                 <span style="color: #0000ff">break</span>;<br /><span style="color: #008080"> 14</span>             }<br /><span style="color: #008080"> 15</span>         }<br /><span style="color: #008080"> 16</span>         <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i < HALF_LEN; i++) {<br /><span style="color: #008080"> 17</span>             <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN + i] == isWho) {<br /><span style="color: #008080"> 18</span>                 count++;<br /><span style="color: #008080"> 19</span>             } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 20</span>                 <span style="color: #0000ff">break</span>;<br /><span style="color: #008080"> 21</span>             }<br /><span style="color: #008080"> 22</span>         }<br /><span style="color: #008080"> 23</span>         <span style="color: #0000ff">if</span> (count == 4) {<br /><span style="color: #008080"> 24</span>             <span style="color: #0000ff">return</span> <span style="color: #0000ff">true</span>;<br /><span style="color: #008080"> 25</span>         }<br /><span style="color: #008080"> 26</span>         <span style="color: #0000ff">return</span> <span style="color: #0000ff">false</span>;<br /><span style="color: #008080"> 27</span>     }<br /><span style="color: #008080"> 28</span> <br /><span style="color: #008080"> 29</span>     <span style="color: #008000">/**</span><span style="color: #008000"><br /></span><span style="color: #008080"> 30</span> <span style="color: #008000">     * <br /></span><span style="color: #008080"> 31</span> <span style="color: #008000">     * 分析zd return 是否存在zd<br /></span><span style="color: #008080"> 32</span> <span style="color: #008000">     * <br /></span><span style="color: #008080"> 33</span> <span style="color: #008000">     * </span><span style="color: #808080">@param</span><span style="color: #008000"> tmpChess<br /></span><span style="color: #008080"> 34</span> <span style="color: #008000">     </span><span style="color: #008000">*/</span><br /><span style="color: #008080"> 35</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">boolean</span> analyzeHuosi(<span style="color: #0000ff">int</span>[] tmpChess, <span style="color: #0000ff">int</span> isWho) {<br /><span style="color: #008080"> 36</span>         <span style="color: #0000ff">int</span> count = 0;<br /><span style="color: #008080"> 37</span>         <span style="color: #0000ff">int</span> i = 0;<br /><span style="color: #008080"> 38</span>         <span style="color: #0000ff">boolean</span> isSpace = <span style="color: #0000ff">false</span>;<br /><span style="color: #008080"> 39</span>         <span style="color: #0000ff">for</span> (i = 0; i < HALF_LEN; i++) {<br /><span style="color: #008080"> 40</span>             <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN - (i + 1)] == isWho) {<br /><span style="color: #008080"> 41</span>                 count++;<br /><span style="color: #008080"> 42</span>             } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 43</span>                 <span style="color: #0000ff">break</span>;<br /><span style="color: #008080"> 44</span>             }<br /><span style="color: #008080"> 45</span>         }<br /><span style="color: #008080"> 46</span>         <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN - (i + 1)] == 0) {<br /><span style="color: #008080"> 47</span>             isSpace = <span style="color: #0000ff">true</span>;<br /><span style="color: #008080"> 48</span>         }<br /><span style="color: #008080"> 49</span>         <span style="color: #0000ff">for</span> (i = 0; i < HALF_LEN; i++) {<br /><span style="color: #008080"> 50</span>             <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN + i] == isWho) {<br /><span style="color: #008080"> 51</span>                 count++;<br /><span style="color: #008080"> 52</span>             } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 53</span>                 <span style="color: #0000ff">break</span>;<br /><span style="color: #008080"> 54</span>             }<br /><span style="color: #008080"> 55</span>         }<br /><span style="color: #008080"> 56</span>         <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN + i] == 0) {<br /><span style="color: #008080"> 57</span>             isSpace = <span style="color: #0000ff">true</span>;<br /><span style="color: #008080"> 58</span>         } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 59</span>             isSpace = <span style="color: #0000ff">false</span>;<br /><span style="color: #008080"> 60</span>         }<br /><span style="color: #008080"> 61</span> <br /><span style="color: #008080"> 62</span>         <span style="color: #0000ff">if</span> (count == 3 && isSpace) {<br /><span style="color: #008080"> 63</span>             <span style="color: #0000ff">return</span> <span style="color: #0000ff">true</span>;<br /><span style="color: #008080"> 64</span>         }<br /><span style="color: #008080"> 65</span>         <span style="color: #0000ff">return</span> <span style="color: #0000ff">false</span>;<br /><span style="color: #008080"> 66</span>     }<br /><span style="color: #008080"> 67</span> <br /><span style="color: #008080"> 68</span>     <span style="color: #008000">/**</span><span style="color: #008000"><br /></span><span style="color: #008080"> 69</span> <span style="color: #008000">     * <br /></span><span style="color: #008080"> 70</span> <span style="color: #008000">     * 分析zM return 是否存在zM<br /></span><span style="color: #008080"> 71</span> <span style="color: #008000">     * <br /></span><span style="color: #008080"> 72</span> <span style="color: #008000">     * </span><span style="color: #808080">@param</span><span style="color: #008000"> tmpChess<br /></span><span style="color: #008080"> 73</span> <span style="color: #008000">     </span><span style="color: #008000">*/</span><br /><span style="color: #008080"> 74</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">boolean</span> analyzeHuosan(<span style="color: #0000ff">int</span>[] tmpChess, <span style="color: #0000ff">int</span> isWho) {<br /><span style="color: #008080"> 75</span>         <span style="color: #0000ff">int</span> count = 0;<br /><span style="color: #008080"> 76</span>         <span style="color: #0000ff">int</span> i = 0;<br /><span style="color: #008080"> 77</span>         <span style="color: #0000ff">boolean</span> isSpace = <span style="color: #0000ff">false</span>;<br /><span style="color: #008080"> 78</span>         <span style="color: #0000ff">for</span> (i = 0; i < HALF_LEN; i++) {<br /><span style="color: #008080"> 79</span>             <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN - (i + 1)] == isWho) {<br /><span style="color: #008080"> 80</span>                 count++;<br /><span style="color: #008080"> 81</span>             } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 82</span>                 <span style="color: #0000ff">break</span>;<br /><span style="color: #008080"> 83</span>             }<br /><span style="color: #008080"> 84</span>         }<br /><span style="color: #008080"> 85</span>         <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN - (i + 1)] == 0) {<br /><span style="color: #008080"> 86</span>             isSpace = <span style="color: #0000ff">true</span>;<br /><span style="color: #008080"> 87</span>         }<br /><span style="color: #008080"> 88</span>         <span style="color: #0000ff">for</span> (i = 0; i < HALF_LEN; i++) {<br /><span style="color: #008080"> 89</span>             <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN + i] == isWho) {<br /><span style="color: #008080"> 90</span>                 count++;<br /><span style="color: #008080"> 91</span>             } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 92</span>                 <span style="color: #0000ff">break</span>;<br /><span style="color: #008080"> 93</span>             }<br /><span style="color: #008080"> 94</span>         }<br /><span style="color: #008080"> 95</span>         <span style="color: #0000ff">if</span> (tmpChess[HALF_LEN + i] == 0) {<br /><span style="color: #008080"> 96</span>             isSpace = <span style="color: #0000ff">true</span>;<br /><span style="color: #008080"> 97</span>         } <span style="color: #0000ff">else</span> {<br /><span style="color: #008080"> 98</span>             isSpace = <span style="color: #0000ff">false</span>;<br /><span style="color: #008080"> 99</span>         }<br /><span style="color: #008080">100</span> <br /><span style="color: #008080">101</span>         <span style="color: #0000ff">if</span> (count == 2 && isSpace) {<br /><span style="color: #008080">102</span>             <span style="color: #0000ff">return</span> <span style="color: #0000ff">true</span>;<br /><span style="color: #008080">103</span>         }<br /><span style="color: #008080">104</span>         <span style="color: #0000ff">return</span> <span style="color: #0000ff">false</span>;<br /><span style="color: #008080">105</span>     }</div></div>3、将玩家型数组和电脑棋型数l每个元素的分数比较Q选出最大的五个攑օ一个降序排列的数组中?br /> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px; border-image: initial"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008000">/**</span><span style="color: #008000"><br />     * 扑ֈ最佳点<br />     * <br />     * </span><span style="color: #808080">@return</span><span style="color: #008000"> 最佳点<br />     </span><span style="color: #008000">*/</span><br />    <span style="color: #0000ff">private</span> ChessPoint findBestPoint() {<br />        <span style="color: #0000ff">int</span> i, j;<br />        ChessPoint point;<br />        <span style="color: #0000ff">int</span> maxScore = 0;<br />        <span style="color: #0000ff">int</span> tmpScore = 0;<br />        <span style="color: #0000ff">for</span> (i = 0; i < CHESS_GRID; i++) {<br />            <span style="color: #0000ff">for</span> (j = 0; j < CHESS_GRID; j++) {<br />                <span style="color: #008000">//</span><span style="color: #008000"> 电脑比较</span><span style="color: #008000"><br /></span>                tmpScore = computerTable[i][j][0];<br />                tmpScore += computerTable[i][j][1];<br />                tmpScore += computerTable[i][j][2];<br />                tmpScore += computerTable[i][j][3];<br />                <span style="color: #0000ff">if</span> (maxScore <= tmpScore) {<br />                    maxScore = tmpScore;<br />                    point = <span style="color: #0000ff">new</span> ChessPoint();<br />                    point.x = j;<br />                    point.y = i;<br />                    point.score = maxScore;<br />                    insertBetterChessPoint(point);<br />                }<br />                <span style="color: #008000">//</span><span style="color: #008000"> 玩家比较</span><span style="color: #008000"><br /></span>                tmpScore = playerTable[i][j][0];<br />                tmpScore += playerTable[i][j][1];<br />                tmpScore += playerTable[i][j][2];<br />                tmpScore += playerTable[i][j][3];<br />                <span style="color: #0000ff">if</span> (maxScore <= tmpScore) {<br />                    maxScore = tmpScore;<br />                    point = <span style="color: #0000ff">new</span> ChessPoint();<br />                    point.x = j;<br />                    point.y = i;<br />                    point.score = maxScore;<br />                    insertBetterChessPoint(point);<br />                }<br /><br />            }<br />        }<br /><br />        <span style="color: #008000">//</span><span style="color: #008000"> Log.v("cmaxpoint = ", "" + cMaxScore);<br />        </span><span style="color: #008000">//</span><span style="color: #008000"> Log.v("pmaxpoint = ", "" + pMaxScore);</span><span style="color: #008000"><br /></span><br />        <br />        <span style="color: #0000ff">return</span> analyzeBetterChess();<br />    }</div>4、处理降序排列的数组Q如果第一个元素的分数>=(必胜的条件的分数)Q直接返回就可以了,如果于ql处理我们降序排列的数组每个元素Q假设每个元素已下,然后判断其生的后果Q取出具有最佛_果的元素Qƈq回其|作ؓ电脑下棋炏V判断每个元素的产生后果Ӟ其实只需要处理其产生作用的棋盘范围就行了(以该元素位置Z心的正方形的盘范围Q正方Ş辚w? + 1 + 4Q我用的10)Q不必要处理搜烦处理整个盘的棋子?span style="background-color: #eeeeee; color: #0000ff; font-size: 13px">private</span><span style="background-color: #eeeeee; font-size: 13px"> ChessPoint analyzeBetterChess() {</span><br /> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px">        <span style="color: #0000ff">if</span>(fiveBetterPoints[0].score > 30){<br />            <span style="color: #0000ff">return</span> fiveBetterPoints[0];<br />        }<br />        <span style="color: #0000ff">else</span><br />        {<br />            ChessPoint betterPoint = <span style="color: #0000ff">null</span>;<br />            ChessPoint tmpPoint = <span style="color: #0000ff">null</span>;        <br />            <br />            <span style="color: #0000ff">int</span> goodIdx = 0;<br />            <span style="color: #0000ff">int</span> i = 0;<br />            <span style="color: #0000ff">int</span> startx, starty, endx, endy;<br />            ChessPoint[] fbpTmp  = <span style="color: #0000ff">new</span> ChessPoint[5];<br />            <span style="color: #0000ff">for</span>(i = 0; i < 5;i++){<br />                fbpTmp[i] = fiveBetterPoints[i];<br />            }<br />            <br />            <span style="color: #0000ff">for</span>(i = 0; i < 5;i++){<br />                <span style="color: #0000ff">if</span>(fbpTmp[i] == <span style="color: #0000ff">null</span>) <span style="color: #0000ff">break</span>;<br />                mChessTable[fbpTmp[i].y][fbpTmp[i].x] = BLACK;<br />                clearChessArray();<br />                <br />                startx = fbpTmp[i].x - 5;<br />                starty = fbpTmp[i].y - 5;<br />                <br />                <span style="color: #0000ff">if</span>(startx < 0){<br />                    startx = 0;<br />                }<br />                <br />                <span style="color: #0000ff">if</span>(starty < 0){<br />                    starty = 0;<br />                }<br />                <br />                endx = startx + 10;<br />                endy = starty + 10;<br />                <br />                <span style="color: #0000ff">if</span>(endx > CHESS_GRID){<br />                    endx = CHESS_GRID;<br />                }<br />                <br />                <span style="color: #0000ff">if</span>(endy > CHESS_GRID){<br />                    endy = CHESS_GRID;<br />                }<br />                analyzeChessMater(computerTable, BLACK, startx, starty, endx, endy);<br />                <span style="color: #008000">//</span><span style="color: #008000"> 分析玩家的棋?/span><span style="color: #008000">////////////////////////////////////////////////////</span><span style="color: #008000">/</span><span style="color: #008000"><br /></span>                analyzeChessMater(playerTable, WHITE, startx, starty, endx, endy);<br />                tmpPoint = findBetterPoint(startx, starty, endx, endy);<br />                <span style="color: #0000ff">if</span>(betterPoint != <span style="color: #0000ff">null</span>){<br />                    <span style="color: #0000ff">if</span>(betterPoint.score <=  tmpPoint.score){<br />                        betterPoint = tmpPoint;<br />                        goodIdx = i;<br />                    }<br />                }<br />                <span style="color: #0000ff">else</span>{<br />                    betterPoint = tmpPoint;<br />                    goodIdx = i;<br />                }<br />                <br />                mChessTable[fbpTmp[i].y][fbpTmp[i].x] = 0;<br />            }        <br />            tmpPoint = <span style="color: #0000ff">null</span>;<br />            betterPoint = <span style="color: #0000ff">null</span>;<br />            <span style="color: #0000ff">return</span> fbpTmp[goodIdx];<br />        }<br /><br />    }</div>OKQ差不多pP?a >源码</a>吧,应该q有问题Q其实速度q算可以。我要睡觉了Q明天还要上班?<img src ="http://www.aygfsteel.com/vagasnail/aggbug/371325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/vagasnail/" target="_blank">vagasnail</a> 2012-03-06 12:53 <a href="http://www.aygfsteel.com/vagasnail/archive/2012/03/06/371325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发生INSTALL_FAILED_UPDATE_INCOMPATIBLE无法安装E序http://www.aygfsteel.com/vagasnail/archive/2011/09/22/359210.htmlvagasnailvagasnailWed, 21 Sep 2011 16:02:00 GMThttp://www.aygfsteel.com/vagasnail/archive/2011/09/22/359210.htmlhttp://www.aygfsteel.com/vagasnail/comments/359210.htmlhttp://www.aygfsteel.com/vagasnail/archive/2011/09/22/359210.html#Feedback0http://www.aygfsteel.com/vagasnail/comments/commentRss/359210.htmlhttp://www.aygfsteel.com/vagasnail/services/trackbacks/359210.htmlINSTALL_FAILED_UPDATE_INCOMPATIBLE错误Q?/span>
只需要将 /data/data/XXX删掉,XXX是包名,用adb shellq去删?/span>
删掉 
/data/app下指定的apk文g
在DDMS中导?div style="display: inline-block; ">
shared-user/data/system/packages.xml文gQ删除掉指定E序的包名相关的记录Q?br />特别是指定的shared-user节点?/span>
覆盖手机中的
/data/system/packages.xml。重启手机,可以安装程序了?/span>

vagasnail 2011-09-22 00:02 发表评论
]]>
如何开始NDKhttp://www.aygfsteel.com/vagasnail/archive/2011/08/26/357382.htmlvagasnailvagasnailFri, 26 Aug 2011 15:56:00 GMThttp://www.aygfsteel.com/vagasnail/archive/2011/08/26/357382.htmlhttp://www.aygfsteel.com/vagasnail/comments/357382.htmlhttp://www.aygfsteel.com/vagasnail/archive/2011/08/26/357382.html#Feedback1http://www.aygfsteel.com/vagasnail/comments/commentRss/357382.htmlhttp://www.aygfsteel.com/vagasnail/services/trackbacks/357382.html
首先需要一个集成了Android SDK的eclipseQ这׃多说了?br /> 1, 首先我是在WinXP下面q行的,所以要安装Cygwin(q是一个在Windows下面q行linux/unix的工P而你不需要安装相应的OS)Q请安装最新版本,在下载包的时?/div>
h意下载,
autoconf2.1 
automake1.10 
binutils 
gcc-core 
gcc4-core 
gdb 
pcre 
pcre-devel 
q些必须下蝲?/div>
安装完成后,
打开GygwinQ输?/div>
make -v
gcc -v
查是否安装成功,否则点击setup.exe更新?/div>
2Q下载NDK
3Q在Cygwin的home/用户/.bashrc文g最后加?/div>
NDK=/cygdrive/d/android-sdk-windows/android-ndk-r6
#向外指定该变?/div>
export NDK
d/android-sdk-windows/android-ndk-r6是你的NDK的目录d代表盘符?/div>
输入cd $NDK查是否成功。如果成功就会蟩转到前面指定的目录?/div>
4,Cygwin的bin目录和ndk的安装目录都加入的path环境变量的后面?/div>
5,~译hello-jniCZQ在Cygwin中进入到samples\hello-jni\jni目录Q?/div>
  执行$NDK/ndk-build~译cE序。编译后会生成libs\armeabi\libhello-jni.so
  OK?/div>
6, 可以在eclipse中安装cdtQ这样可以更方便的编写c/c++E序?/div>
7, Eclipse 的生成器。以下是我的配置Q?(感谢?/a>)
   叛_你的目Q选择properties
   在左边的列表中选择Builders
   在右侧,点击 New… 按钮 
   在列表框Q选择Program 作ؓ配置cdQ点击OK 按钮Q进入下一个配|对话框?nbsp;
   命名 name 为NDK Builder  
   选择 Location 为d:\cygwin\bin\bash.exe 
   Working Directory 为d:\cygwin\bin 
   Arguments 为: 
   --login -c "cd /cygdrive/D/android_works/HelloJni/jni && ndk-build"
   保?login 前有两个q接P -c 后面的引受?nbsp;
   接着打开 refresh ?tab 面板Q?nbsp;
   选中Refresh resources upon completion
   选择Specific resources
   点击Specify resources 按钮Q选择你项目的 lib 目录Q如果你没有lib目录Q那么用默认选择The entire workspace卛_?/div>
   选中Recursively include sub-folders  
   接着打开Build Options ?tab 面板Q?nbsp;
   选中Allocate Console 
   选中Launch in background 
   选中Run the builder After a Clean 
   选中Run the builder During manual builds 
   选中Run the builder During auto builds 
   选中Specify working set of relevant resources 
   点击Specify Resources 按钮Q选择你项目的 JNI 目录Qƈ包含所有的文g?nbsp;
   点击OK 按钮?nbsp;


vagasnail 2011-08-26 23:56 发表评论
]]>使用ksoap2 for android 调用WebServicehttp://www.aygfsteel.com/vagasnail/archive/2011/05/07/349751.htmlvagasnailvagasnailSat, 07 May 2011 11:12:00 GMThttp://www.aygfsteel.com/vagasnail/archive/2011/05/07/349751.htmlhttp://www.aygfsteel.com/vagasnail/comments/349751.htmlhttp://www.aygfsteel.com/vagasnail/archive/2011/05/07/349751.html#Feedback0http://www.aygfsteel.com/vagasnail/comments/commentRss/349751.htmlhttp://www.aygfsteel.com/vagasnail/services/trackbacks/349751.html阅读全文

vagasnail 2011-05-07 19:12 发表评论
]]>
Android中用SAX来解析XMLhttp://www.aygfsteel.com/vagasnail/archive/2011/04/17/348436.htmlvagasnailvagasnailSun, 17 Apr 2011 05:40:00 GMThttp://www.aygfsteel.com/vagasnail/archive/2011/04/17/348436.htmlhttp://www.aygfsteel.com/vagasnail/comments/348436.htmlhttp://www.aygfsteel.com/vagasnail/archive/2011/04/17/348436.html#Feedback2http://www.aygfsteel.com/vagasnail/comments/commentRss/348436.htmlhttp://www.aygfsteel.com/vagasnail/services/trackbacks/348436.html阅读全文

vagasnail 2011-04-17 13:40 发表评论
]]>
Android的Widgethttp://www.aygfsteel.com/vagasnail/archive/2011/04/10/348025.htmlvagasnailvagasnailSun, 10 Apr 2011 15:52:00 GMThttp://www.aygfsteel.com/vagasnail/archive/2011/04/10/348025.htmlhttp://www.aygfsteel.com/vagasnail/comments/348025.htmlhttp://www.aygfsteel.com/vagasnail/archive/2011/04/10/348025.html#Feedback0http://www.aygfsteel.com/vagasnail/comments/commentRss/348025.htmlhttp://www.aygfsteel.com/vagasnail/services/trackbacks/348025.html       (1) 建立一个Android工程Q用eclispse吧,下一步,下一步的׃多说了?br />       (2) 在res/xml目录下面建立一个xml文g。命名随便吧。写下如下内?br />            
1<?xml version="1.0" encoding="utf-8"?>
2<appwidget-provider
3  xmlns:android="http://schemas.android.com/apk/res/android"
4  android:initialLayout="@layout/widget_layout_small"
5  android:minWidth="72dip" android:minHeight="72dip" android:updatePeriodMillis="3600000">
6</appwidget-provider>
         q里是定义一个appwidget-providerQAndroidpȝ从这里认E序是一个widgetE序。android:initialLayout指定布局文gQ也是在res/layout目录下的那些个xml文gQandroid:updatePeriodMillis知道更新周期Q单位ؓ毫秒Q还有一个android:configureQ这个是可选的Q如果你的widget事先要启动一个ActivityQ就需要在q里指定一个ActivityQ显然我们这里不需要。他是一个AppWidgetProviderInfocȝ描述信息?br />      (3) 写布局文gQ这个就不多说了?br />      (4) appwidget-providerQ定义一个类Q从AppWidgetProvidercȝ承,他实际是一个BroadcastReceiverQ系l用它和Widget界面q行交互?br />          
 1package cn.vaga.today;
 2
 3import java.util.Calendar;
 4
 5import android.app.PendingIntent;
 6import android.appwidget.AppWidgetManager;
 7import android.appwidget.AppWidgetProvider;
 8import android.content.ComponentName;
 9import android.content.Context;
10import android.content.Intent;
11import android.graphics.Canvas;
12import android.text.format.Time;
13import android.widget.RemoteViews;
14
15public class TodayDateSmall extends AppWidgetProvider
16{
17    // 当这个AppWidget提供?nbsp;被要求提供RemoteViews一pd的AppWidgetsQ这个方法作为ACTION_APPWIDGET_UPDATE
18    // q播回复时被调用
19    // 每次更新AppWidget时候调?/span>
20       @Override
21       public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
22           // 得到更新后的RemoteViews
23          RemoteViews updateView = buildUpdate(context);
24          //更新Widget的RemoteViews
25          appWidgetManager.updateAppWidget(appWidgetIds, updateView);
26          super.onUpdate(context, appWidgetManager, appWidgetIds);
27       }

28       
29       private String[] months = {"一?/span>""二月""三月""四月",
30               "五月""六月""七月""八月",
31               "九月""十月""十一?/span>""十二?/span>"};
32       
33       
34       private RemoteViews buildUpdate(Context context) {
35          RemoteViews updateView = null;
36          // q个Time更快
37         // Time time = new Time();
38          // 现在
39          //time.setToNow();
40          Calendar cal = Calendar.getInstance();
41          String month = months[cal.get(Calendar.MONTH)];
42          // 得到RemoteViews
43          updateView = new RemoteViews(context.getPackageName(), R.layout.widget_layout_small);
44          // 讄View的内?br /> 45          // 日期
46          updateView.setTextViewText(R.id.Date, String.valueOf(cal.get(Calendar.DATE)));
47          // ?/span>
48          updateView.setTextViewText(R.id.Month, month);
49          Lunar lunar = new Lunar(cal);
50          updateView.setTextViewText(R.id.Lunar,lunar.toString());
51          // OKQ这个一个运行用的Intent?br /> 52          // 加下面这D应该只是ؓ了让Widget相应click事g?/span>
53          Intent launchIntent = new Intent();
54          // 讄处理该Intent的组Ӟq里是android自带的日期启动组?/span>
55          launchIntent.setComponent(new ComponentName("com.android.calendar""com.android.calendar.LaunchActivity"));
56          // 讄该ItentZq入?/span>
57          launchIntent.setAction(Intent.ACTION_MAIN);
58          launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
59          launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
60          // 启动指定的Intent的Activity
61          PendingIntent intent = PendingIntent.getActivity(context, 0, launchIntent, 0);
62          // 监听点击事g
63          updateView.setOnClickPendingIntent(R.id.SmallBase, intent);
64          return updateView;
65       }

66}

67
68
     他有四个ҎQonDeleted、onEnabled、onDisabled、onUpdateQ我们这里只实现了最主要的onUpdateҎQ他在周期更新的时候调用。每ơ调用就用appWidgetManager来更新Widget(生成一个RemoteView)。appWidgetManager是系l生成的用于理Widget的对象,我们不需要进行管理,它会向AppWidgetProvider发通知Q他会更新Widget的UI?br />
     (5) AndroidManifest.xml 
     
 1<?xml version="1.0" encoding="utf-8"?>
 2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3      package="cn.vaga.today"
 4      android:versionCode="1"
 5      android:versionName="1.0">
 6    <application android:icon="@drawable/icon" android:label="@string/app_name_small">
 7        <!-- 订阅指定的BroadcastReceiver -->
 8        <receiver android:label="@string/app_name_small" android:name=".TodayDateSmall">
 9            <intent-filter>
10            <!-- 只处理更新的广?nbsp;-->
11                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
12            </intent-filter>
13            <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_small"></meta-data>
14        </receiver>
15    </application>
16    <uses-sdk android:minSdkVersion="7" />
17
18</manifest> 

     在这里注册AppWidgetRecever指定其处理的Intent的Action为android.appwidget.action.APPWIDGET_UPDATE。当然还要个AppWidgetRecever指定它的描述文g
            <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_small"></meta-data>Q这是很必要的,否则Android也不会知道这个Widget到底是如何定义的了?br />

vagasnail 2011-04-10 23:52 发表评论
]]>
վ֩ģ壺 | | | ̨| | ӯ| մ| ̨| | | | | | | ƺ| Į| | п| | | лͨ| ÷| ˮ| | Ļ| ڳ| | | | | | | | Դ| | ػ| Դ| ͨ| | Ϫ| |