2014年4月26日 星期六

android ProGuard 後的 debug

看著google後台的call stack,發現自己又忘了要如何處置了,再記下來好了,不然每次都要到處找。
工具是 android-sdks/tools/proguard/bin/proguardgui.sh
執行後如下:
最左邊選ReTrace
上方Mapping file 選專案內的proguard/mapping.txt
Obfuscated stack trace 就貼上收到的call stack
最後按下右下方的 ReTrace!
然後就可以快樂地?除錯了哦

2014年4月19日 星期六

eclipse 錯誤訊息 Unable to execute dex: GC overhead limit exceeded

其實和網路上找到的解法大同小異,但還是做個記錄。
1.找出eclipse.ini文件,因為我是在ubuntu下,所以是放在/etc 內
2.找到 --launcher.XXMaxPermSize 這行,把下一行的256m(數值可能會不同)改為512m
3.找到以下3行 
-vmargs
-Xms256m
-Xmx512m
其中的數值可能會不一樣,把後頭2行的數值加大,例如
-Xms512m
-Xmx1024m
4.找到 -XX:MaxPermSize=256m (數值可能不同) ,一樣數值加大,例如
-XX:MaxPermSize=512m

2014年3月2日 星期日

java Could not find class

下載了 photon server 的 android client 範例,編釋上沒什麼問題,只是執行後會出現如下錯誤:
Could not find class 'de.exitgames.demo.loadbalancing.ClientDemo', referenced from method de.exitgame.demo.loadbalancing.ApplicationManager.<client>

也出現了這種錯誤,後頭訊息就不打出來了
java.lang.NoClassDefFoundError:
本來以為沒什麼,google後一狗票的解決方法,試了一整天,竟解決不了,都快放棄了。最後試了在專案放jar庫的地方,也就是libs上
按右鍵->build path->use as source folder,選擇後就解決了。

但最吐血的還不在這,原本想好好做個記錄,讓有碰到相同問題的朋友們不要像我一樣浪費整天的時間,於是把專案砍掉,重新滙入,準備把錯誤
詳細記下,結果好像從來沒發生過似的,這個問題消失了,也不用按右鍵去選 use as source folder ,真是令人無言。

2014年1月31日 星期五

Pyro Particle Editor SetLocalMatrix 矩陣用法

最近在工作上使用了 Pyro Particle Editor     官網在這:http://pyro.fenomen-games.com/

可能有點冷門吧,它的SDK使用在網路上查不到什麼教學,只能看裡面的範例寫程式,但範例只有寫到CPyroEmitter控制XY來改變位置,那旋轉或縮放呢?

在IPyroParticleEmitter類別內確實是有一些控制的函數,不過只用上SetLocalMatrix就很好用了,可是參數const float m[3][4]要怎麼填?

我以D3DX的D3DXMATRIX為例子:

//宣告D3D的矩陣
D3DXMATRIX Mat;

//之後Mat填入或計算自己想要的移動旋轉或縮放


//Mat算好後,依下面順序填入
float m[3][4]={{Mat._11,Mat._21,Mat._31,Mat._41},
{Mat._12,Mat._22,Mat._32,Mat._42},
{Mat._13,Mat._23,Mat._33,Mat._43},};

//在類別render之前呼叫SetLocalMatrix 即可
m_pEmitter->SetLocalMatrix(m);
m_pEmitter->Render();

依每個人不同的用法,要改一下程式,我是直接在CPyroEmitter類別加上void Render(float m[3][4])
{
if( m_pEmitter ){
m_pEmitter->SetLocalMatrix(m);
m_pEmitter->Render();
}
}

但重點就是矩陣填入的方式,我一開始填成Mat._11,Mat._12的順序,浪費不少時間,這邊做個記錄,說不定也可以幫到別人。


2014年1月11日 星期六

onActivityResult 無法接收到 resultCode與data

今日快樂的使用onActivityResult時,竟然收到resultCode=0與data=null。
不過requestCode到是正常,這可怪了,之前可用得好好的,網上查了一下,也沒找到答案。

想了想,這次使用setResult的時機是在onDestroy內呼叫的,會不會是這個原因呢?以往都是按下button才呼叫setResult,之後接著finish();離開這個Activity,這次剛好想在onDestroy才回傳,結果失敗了。

也有試著在onStop內做同樣的事,也是失敗,會不會onStop與onDestroy內原本就不能做setResult呢?

當然啦,細節還是以後再想,先解決問題,就先不要在onDestroy內呼叫setResult。改成在keyDown內呼叫,程式碼如下:
public boolean onKeyDown(int keyCode, KeyEvent e) {
    if(keyCode == KeyEvent.KEYCODE_BACK && 0==e.getRepeatCount() )        {
    Intent intent = new Intent();
    Bundle bundleBack = new Bundle();
    bundleBack.putInt("val", "100");
    intent.putExtras(bundleBack);      
    setResult(RESULT_OK, intent);
     finish();
    }
    return false;
}