發表文章

[Android] One of "Installation failed due to invalid APK file!"

Today I encounter this error shows in Eclipse console: [xxxx - xxx] Installation failed due to invalid APK file! [xxxx - xxx]  Please check logcat output for more details. [xxxx - xxx]  Launch canceled! then I checked logcat and get a similar message like this one on stackoverflow , You can find sentence like "Unable to read AndroidManifest.xml" in the error message 03 - 03 00 : 43 : 50.508 : W / PackageParser ( 512 ): Unable to read AndroidManifest . xml of / data / local / tmp / Linking Manager . apk If you search "Installation failed due to invalid APK file!" or "Unable to read AndroidManifest.xml", you will get many , many solutions to varying problem sources. But non of them, at least the first couple of articles in my search results, have never mentioned my situation, so here I am trying to contribute one to join them. Problem source:  the *.so file related to my project is out of date Solution: update *.so file ...

Flex的官方文件

感覺Flex的文件有好幾個,搞不清楚到底應該怎麼看,以這篇文章來自我釐清一下脈絡。 Livedocs Using Flex (位於livedocs裡, 網址裡面已經說明只有Flex3的內容) http://livedocs.adobe.com/flex/3/html/index.html 這份文件很棒,以口語化的內容向開發者介紹Flex各個環節, 文中並嵌入 source code和範例,就像是一本寫得很好的書。想要了解某個機制的設計和概念時,可以先從這邊開始閱讀。user可以針對每篇內容做討論。 Help Using Flex (位於Help裡) http://help.adobe.com/en_US/flex/using/index.html 與Livedocs的內容幾乎一模一樣,但網址裡面沒有限定某一個版本,所以內容包含Spark的介紹也合理。一樣的內容,但Index書目跟Livedocs卻不一樣,但稍微比對一下發現只是章節編排的位置不同。比如Deployment的章節,在Help裡位於最後一章,但在Livedocs卻是位於中間介紹完Development的地方。Help裡面經常會附帶有Builder的操作步驟。跟Livedocs一樣,user可以針對每篇內容做討論,Help裡面也有這個機制,但可能比較新的關係,Help的討論幾乎沒有,在Livedocs中的討論比較多。 不一樣的地方來了,(1) 對於Flex Builder的介紹方面,Livedocs是針對比較舊的Flex Builder 3做介紹,新的Flash Builder 4以上所具有的功能當然就沒有,這很合理。至於內容上,又是否有什麼不一樣呢? [TODO] 實際找一個需要了解 topic的內容,兩邊都看過再來比較。然後,Help裡面會包含,但LiveDocs裡面不會有。(2) 有包含AIR的介紹。不一樣的地方,沒有包含AIR的介紹。(3) Help文件有中文翻譯,只要把"en_US"的路徑,改為"zh_TW"就可以看到中文版,如果沒有繁體中文版會被導到英文版中,這時也可以"zh_CH"試試簡體中文版。不曉得為何不直接在UI上提供語言切換,又是一個謎。(4) 有行動應用方面的資訊,...

Android ADT 21.0.1 Bug

最近安裝Android ADT 21.0.1,編譯時會提示: Errors running builder 'Android Pre Compiler' on project 'XXX' java.lang.NullPointerException 找不到問題頭痛非常久, 後來 才知道原來有個Bug會因為project檔案裡有任何檔案沒有副檔名而造成編譯失敗... 太冏了...原本一直搞不懂為啥source裏頭會有無檔名出現...結果發現因為source經常會跟svn做同步,而svn裡面很多無副檔名的檔案,這種問題很難發覺和debug! 所幸這個問題在adt 21rc3 preivew版裡有修正,所以已經安裝這版的人可以先安裝preview版來解決這問題。 更新方法 如此所示 ,必須Platform-Tools和ADT兩者都更新才有用。更新完畢就可以了,接著就等著某某天再來煩惱怎麼改回非preview版。

Android的@Override Error

圖片
久久沒用Android,重新安裝了環境、匯入Propject後跑出了一些錯誤,都是沒有實作的error,如: Multiple markers at this line - implements android.text.TextWatcher.afterTextChanged - The method afterTextChanged(Editable) of type showTextInputDialog.CustomTextWatcher must override a superclass  原來這是 Java SDK版本對於註記符號支援度 的問題,ADT預設使用Java 1.5( language level 5) 編譯內容,但1.5檢查source的時候並不認得「@Override」註記方法,而認為該class沒有正確override,只要把language level改成1.6(以上)就可以了。修改位置: project >  property > java compiler > Compiler compliance level > 1.6。

Flex 3 Tree 元件的資料更新Bug

圖片
Flex 3 的Tree元件可以使用filterFunction來做過濾的功能,比如介面上有一個文字框,輸入文字後比對Tree內容,不包含這段過濾文字者就不顯示。正確情況應該如下圖所示。 但是如果資料的筆數很多時,在Tree元件上使用filterFunction過濾資料時,Tree的內容會亂掉並跑出幾個奇怪的現象: 過濾以後的Tree高度,不會更新,所以ScrollBar一樣可以向下拉動很長的高度。如下圖示,ScrollBar還是很小,表示Tree內容很長。 過濾後,Tree內容仍然保持很長,那不應該存在的cell會怎樣呢?結果Tree裡面會自動找東西亂填cell,如下圖,過濾後應該有5個cell,但超過第3個cell的名稱就開始重複了。 即使使用了invalidateList、validateNow、Collection.refresh等方法也沒有用,標準解法目前未知,但可以用下列方式將顯示更正。在呼叫完filterFunction以後,加上下列方式: tree.expandItem( [your tree data] ,false); tree.expandItem( [your tree data] ,true); 語意上就是讓Tree展開和關閉一次,expandItem方法內部觸發了某個正確的resize和display方法,什麼方法?暫不研究。

Flash Platform 重大更新 -- Flash Player 11.4 and AIR 3.4

近日Flash Platform提出重大更新 --  Flash Player 11.4 and AIR 3.4,更新重點節錄如下: Flash Player 11.4 webcam support for StageVideo broader   Stage3D support Starling framework  has been updated to be constrained mode ready (?) AIR 3.4 iOS push notifications iOS 5.1 SDK support compressed texture with alpha for stage3D  (?) Webcam support for StageVideo Flash Builder 4.7 beta Apache Flex 4.8 support for Flash Player 11.4 AIR 3.4  and many improvements to iOS app development workflows including USB debugging, iOS simulator support, and direct on-device deployment. Flash Professional (early September) ToolKit CreateJS 1.1 support for Flash Player 11.4 and AIR 3.4 improved iOS app development workflows including iOS simulator support, and direct on-device deployment ::References:: 完整更新列表: Flash Player and Adobe AIR feature list 新聞來源: Enabling the web and app development with new bleeding edge technology – Flash Player 11.4 and AIR 3.4 ...

ActionScript的Dictionary

當作動態集合時, Dictionary 跟Object的功能很類似,唯一的不同點就是Dictionary可以設定為弱引用,這樣當Dictionary中紀錄了大量的資料時,可以自行識別集合中的物件是否已經剩下Dictionary中才存在了,是的話就會把引用從Dictionary中移除,如此一來可以讓Dictionary集合的記憶體使用比較有效率。

ActionScript使用原生 JSON 功能

ActionScript在Flash Player 11.0以上開始原生地支援JSON了,官方中文文件可見  使用原生 JSON 功能  和  API Reference 。 節錄官方API的目錄: JSON API 概觀 toJSON() 方法 定義自訂 JSON 行為 在內建類別的原型定義 toJSON() 定義或覆寫類別層級的 toJSON() 使用 JSON.stringify() replacer 參數 使用 JSON.parse() reviver 參數 剖析範例

Cast String to numbers

轉換成整數 int string = "5"; num = parseInt(string); 轉換成浮點數 Number num = Number(string); num = parseFloat(string);

Unload Flex Module Completely?

Flex內部有提供Module的機制,透過Module的設計,可以把主程式切分成幾個swf,然後在需要的時候才去動態 loading和 instantiated,這樣作理論上可以調控網路使用量和記憶體使用量...可是... 這個機制加載時沒問題(目前),但是移除(unload)時卻是問題重重,最大的問題就是,移除掉module後原本佔用的記憶體永遠不會被釋放, 爬了很多文,發現有一些work around的撇步 ,稍微試了一下結果還是行不通: What We Know About Unloading Modules   Unloading modules completely, MXML   問題的關鍵應該是Flex內部有某些物件始終cache住讀進來的 module的 reference,導致即使表面上以為刪除,但實際上卻永遠不會被垃圾蒐集。時間關係,目前先不考慮用Module來做想要的功能了。

C++版的Tweener : cppTweener

根據短期內開發C++ GUI的經驗,不知道什麼原因,C++的GUI 開發似乎不是很流行類似Tweener ( http://labs.zeh.com.br/blog/?p=95 ) 這樣的工具。在開發Flash專案的時候,有tween沒tween的GUI,效果真是天差地遠,要做流暢的介面始終少不了這類的工具。 曾經用過的Qt framework (open source版)有內建類似的工具,不過在Qt中該工具的設計和內建的function數量,與任一個Flash的 Tweening library比起來還是差多了,甚至最近在測試的兩個3D Engine裡也都沒有這種工具的蹤影。 最近在開發專案的時候,再搜尋了一次,這次發現有人把Tweener porting到c++版了: cpptweener  , 在該project首頁可以找到簡單的教學和demo video。port到C++以後,架構上做了一點更動,整個工具調整成單純是做數學運算,所以也就不依賴任何的GUI framework,只要標準的C++ Standard Library就可以用了。

[Android] 偵測screen size的方法

Configuration conf = this.getResources().getConfiguration(); if((conf.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL){ Toast.makeText(getBaseContext(), "SCREENLAYOUT_SIZE_SMALL" , Toast.LENGTH_LONG).show(); } else if((conf.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){ Toast.makeText(getBaseContext(), "SCREENLAYOUT_SIZE_NORMAL" , Toast.LENGTH_LONG).show(); } else if((conf.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE){ Toast.makeText(getBaseContext(), "SCREENLAYOUT_SIZE_LARGE" , Toast.LENGTH_LONG).show(); }

[Android] Android 開發環境建立

圖片
開發的第一步當然就是建立開發環境,全部建立的過程只需要參考Android developer官方網站http://developer.android.com/sdk/index.html。這邊只是重點式地分享我walk through整個安裝過程的步驟(目前Android的版本是2.2。我的環境是Mac OSX 10.6): (1) Quick Start 是很概觀的介紹,詳細步驟要參考 Installing the SDK (2) 所謂的下載和安裝android sdk,其實是先下載 Android SDK Starter Package,就是一套協助使用者安裝各式各樣工具的工具,然後再利用這套工具去下載需要的版本的sdk, api, driver,starter也用來執行模擬器。 在Mac上面要多一個步驟,這邊我先跳過,結果後面一樣可以HelloWorld。 (3) 然後執行sdk底下的"android",開啟starter。選擇要安裝的component和設定Virtual Device。 (4) 然後就是下載和安裝Eclipse開發工具,然後安裝Eclipse的開發Android外掛 ADT (5) 接下來就可以成功運行 Hello World Tutorial 的範例了。發現由eclipse啟動模擬器時,模擬器會關不掉,所以改為自行啟動starter來執行模擬器比較好,這邊啟動的模擬器一樣可以從eclipse連結過來測試。

如何在AS3 project中使用Flex的mx.utils類別庫?

google了很久,不知道是不是我關鍵字下得不好,這個問題還真不知該怎麼找;最後找到的方法都很奇怪,像是 自行把playerglobals.swc再加入到library path中 ,我用了一樣不行。 試了半天,後來想到,幹麻不直接直接把mx.utils找出來,並且複製到AS3 Project裡,實驗結果發現,果真這樣還真的就可以用了。 mx.utils在哪裡?在我Mac裡的mx.utils資料夾位於: /Applications/Adobe Flex Builder 3/sdks/3.2.0_withAIR20rc/frameworks/projects/framework/src/mx 當複製到AS3 Project裡,並且進行編譯的時候,會跑出一些錯誤,包括: (1) 1068: 無法開啟包含的檔案: {project path}/src/mx/core/Version.as。...... 這個只要把發出這些錯誤的位置的 include "../core/Version.as"; 註解掉就行了 (2) 接下來又會跑出錯誤: Unable to resolve resource bundle "utils" 這時再依樣話葫蘆,到出問題的地方,把那個指令註解掉 最後編譯的時候就都沒有錯誤了,如此便可以成功使用這個類別庫了! 另外搜尋的時候找到這篇文章的方法蠻有趣的 Using StringUtil Class in Flash

然後讀了:Commentary on a post about Adobe’s “Mobile Strategy”

從這篇認識了一些Flashlite的發展歷程 "In the end, Adobe isn’t really providing any clear direction on what Flash professionals should be doing/taking on devices, other than waiting for 10.1 and Adobe CS5 these days. Hopefully, that’ll change in 2010 as 10.1 starts to appear." 連這位專家也對FP10.1感到困惑。 "Android would only make sense, if Adobe *wasn’t* going to do AIR on Android devices … to my knowledge, they haven’t really disclosed that info one way or the other." Flash to iPhone模式要發生在其他平台的一個要素是, 除非對方平台不願給放AIR,不然這個模式沒太大意義。 參考來源: "Commentary on a post about Adobe’s “Mobile Strategy”" - Scott Janousek » Blog Archive » Commentary on a post about Adobe’s “Mobile Strategy” ( 在「Google 網頁註解」中檢視 )

看了文章:Why Adobe’s mobile strategy is fundamentally flawed

讀後感,順便測試一下Google的「網頁註解」 這個題目還不錯, 但作者最後的結論竟然是希望Adobe應該想辦法讓Flash Developer有辦法產出Native apps....如果覺得Flash VM on Mobile造成crapy UE的話,那理所當然要要求Adobe改善crapy VM這件事,Adobe現在好像也是在做這件事。 不是很了解為什麼作者覺得VM不夠好, 轉而認為應該保有Flash CS,放棄VM??。FP10.1不只是FP而已,10. 1這次更新的重點也是為了解決crapy FlashLite的問題不是嗎? 但這篇文章還是讓我知道大家(包括後來回應的Scott Janousek) 對FP 10.1下一步的動作都還是很迷惘 參考來源: Aral Balkan · Why Adobe’s mobile strategy is fundamentally flawed ( 在「Google 網頁註解」中檢視 )

3dmax的biped如何使用CMU的免費motion capture資源

圖片
使用3dmax方面我是外行人,在此以外行人的角度紀錄一下這個操作步驟,有用語錯誤之處請指教。 謝天謝地CMU分享了2600多筆免費的人物動態資料:  CMU Graphics Lab Motion Capture Database This data is free for use in research projects. You may include this data in commercially-sold products, but you may not resell this data directly, even in converted form.There are  2605  trials in  6  categories and  23  subcategories. 分享的格式主要是: tvd, c3d, amc 但這些格式3dmax都不直接支援,因此要使用的話必須使用轉檔工具 Amc2Bvh轉成bvh格式使用,不過其實也可以不用那麼辛苦,因為很幸運地已經有大師幫我們把格式全部都轉成bvh了。 Amc2Bvh provides batch conversion from ASF/AMC to BVH, which are two popular formats used in many motion capture and character animation applications such as  Blender  and  Poser . 這個轉檔工具我實際使用時轉檔都失敗-_- 。 最後當取得bvh檔時,還需要一些操作再把bvh轉成bip格式。 因為匯入motion caputre檔案的時候,bvh似乎會一起改變骨架(figure)的位置和大小,這樣就會讓我們自己的骨架變了型,所以不能直接把3dmax所支援的bvh套用到我們腳色的figure上,所以我們中間還需要一個步驟就是先把bvh的動作套用到一個biped上,然後用這個biped的工具把動作輸出成.bip檔,最後再用我們的骨架把.bip讀進來,就成了。 轉換過程操作如下: (1) 首先要先把bvh匯入到3d...

如何由被讀取的swf (loadee)呼叫讀取者(loader)的function

想呼叫到loader的function,關鍵就是要能夠從被讀取者access到讀取者。範例如下: loader.swf中: trace("loader started."); var loader:Loader = new Loader(); addChild(loader); loader.load(new URLRequest("loadee.swf")); function loaderMethod():void { trace('hello!'); } // pose loader loader.x = stage.stageWidth/2; loader.y = stage.stageHeight/2; loadee.swf中: trace("loadee started."); // 呼叫最parent物件的方法 MovieClip(stage.getChildAt(0)).poppaMethod(); // 呼叫loader所在的物件的方法 (loaderInfo.loader.parent as MovieClip).poppaMethod(); 如果被讀取者想確認是否被讀取,確認讀取以後才去呼叫loader的方法,可以在loadee.swf加上: this.addEventListener(Event.ADDED_TO_STAGE, callLoaderMethod); function callLoaderMethod(event:Event):void { (loaderInfo.loader.parent as MovieClip). loaderMethod(); }

使用avi影片作為ARToolkit的視訊輸入源

在ARToolkit中,讀取video configuration的語法為: arVideoOpen( vconf ); 在範例中都可以看到 vconf 所指向的xml內容,預設是以camera作為影像輸入源,如果要改用avi格式的影像來做辨識,只要把xml內容的<camera>標籤改為如下的<avi_file>標籤即可。     <avi_file file_name="Data/hiro_pattern640x480.avi" loopAVI="true">         <pixel_format>             <RGB32 flip_h="false" flip_v="true"/>         </pixel_format>     </avi_file> avi的路徑是以exe檔為相對位置,不是以xml為相對位置。

如何把3dmax的physique轉成skin

圖片
使用3dmax的physique開發的骨架動畫不被大部分的動態3d格式輸出工具(*.b3d, *.3ds, ... exporter)所支援,大部分輸出工具都只支援3dmax內建的skin骨架動畫,還好可以找到轉檔的工具幫我們把physique轉成skin。 沒想到官網上還可以找到for 3dmax7的版本,分享連結在此:   3ds Max SDK Samples/Utilities Physique to Skin Utility – Recompiled for 3ds Max 6 and 3ds Max 7 An update to the physique to skin converter for 3ds Max 6 and 3ds Max 7. No new functionality has been added. phy2skin.zip (zip - 11Kb) 使用方法很簡單,基本上就是選了mesh以後,再按下Tool裡面的"Convert to Max Skin"按紐,再按下確認以後就成功了。 一張圖說明一切: 這邊也有視訊教學可看: [max] physique蒙皮转skin蒙皮的plugins 使用教学