2012年5月24日 星期四
android listview 的用法
public class BrowerUPnPonClingActivity extends Activity {
/** Called when the activity is first created. */
private ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView=(ListView)findViewById(R.id.listView1);
//加入ArrayList<>
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
for(int i=0;i<3;i++){
HashMap<String, Object> maps = new HashMap<String, Object>();
maps.put("name", i);
list.add(maps);
}
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.listview,new String[]{"name"},new int[]{R.id.textView1});
listView.setAdapter(adapter);
}
}
2012年5月23日 星期三
使用Cling API開發UPnP(一):Registry
Cling裡Registry的用途
1.維護UPnP Network裡的Device列表,如Add/Delete/Search/Update...。而這裡提到的Device,有可能是外來的(RemoteDevice),也有可能是自已建的(LocalDevice)
2.訂閱服務也是由Registry管理?但為什麼要透過controlpoint().excute(subscriptioncallback)去發?
1.維護UPnP Network裡的Device列表,如Add/Delete/Search/Update...。而這裡提到的Device,有可能是外來的(RemoteDevice),也有可能是自已建的(LocalDevice)
2.訂閱服務也是由Registry管理?但為什麼要透過controlpoint().excute(subscriptioncallback)去發?
2012年5月22日 星期二
使用Cling API開發UPnP(二):列出Device/Service/Action
Device
利用RegistryListener()裡的RemoteDeviceAdd可以得到Device
public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
// TODO Auto-generated method stub
System.out.println(device);
RemoteService[] service = device.getServices(); //得到device的所有services
for(int n=0;n<service.length;n++){
System.out.println(service[n]);
Action[] getAction = service[n].getActions(); //得到其中servide的所有actions
for(int m=0;m<getAction.length;m++){
System.out.println(getAction[m]);
}
}
}
利用RegistryListener()裡的RemoteDeviceAdd可以得到Device
public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
// TODO Auto-generated method stub
System.out.println(device);
RemoteService[] service = device.getServices(); //得到device的所有services
for(int n=0;n<service.length;n++){
System.out.println(service[n]);
Action[] getAction = service[n].getActions(); //得到其中servide的所有actions
for(int m=0;m<getAction.length;m++){
System.out.println(getAction[m]);
}
}
}
2012年5月20日 星期日
使用Cling API開發UPnP(一):開始
一直以來都是用Cyberlink來當成開發UPnP的API,後來看到一篇論文是用Cling完成UPnP在Android平台的開發,想說來試試這套,或許也可以在自已的論文中比較這兩套的差異性。
話不多說,先去官網下載cling-distribution-1.0.5.zip,解壓縮後會有cling-core-1.0.5.jar及teleal-common-1.0.13.jar,將這兩個jar丟到java目錄的/lib/ext下。接著我們就可以先玩玩cling的workbench這支程式,其實就是一支UPnP ControlPoint,和Cyberlink比較起來,我還是比較喜歡Cyberlink的,畫面設計的比較面善,log吐出來的資訊較完整。至於功能面目前看來還差不多(還在研究中...)
依官網頁面Getting Strated先來試試看程式的結構性,恩!感覺好像要先啟一個UPnPService,這個Service可以是ControlPoint 或 Device?繼續看下去囉!
1.UpnpService upnpService = new UpnpServiceImp();
-實作一個UPnP Stack,有了這個stack,可以拿來做controlpoint(cling指client)及device(cling指server)
-不要了,就upnpService.shutdown()來切斷所有upnp network連線並通知大家byebye
2.兩個建構子
UpnpService upnpService = new UpnpServiceImp(RegisterListener...)
-馬上實作一個instance
UpnpService upnpService = new UpnpServiceImp(new DefaultUpnpServiceConfiguration(8081))
-DefaultUpnpServiceConfiguration也是一個介面
3.實作controlpoint
upnpService.getControlPoint()
若要search device
-upnpService.getControlPoint.search(new STAllHeader()) ->找所有device
(效果和upnpService.getControlPoint.search()一樣)
-upnpService.getControlPoint.search(new UDNHeader(udn)) ->針對某個udn
4.UDA vs. namespace
UDA是followUPnP Device Architecture下的命名規則
namespace則是依照vendor自行定義的
UPnP Service下有兩個重要元件
-state variable
-action
話不多說,先去官網下載cling-distribution-1.0.5.zip,解壓縮後會有cling-core-1.0.5.jar及teleal-common-1.0.13.jar,將這兩個jar丟到java目錄的/lib/ext下。接著我們就可以先玩玩cling的workbench這支程式,其實就是一支UPnP ControlPoint,和Cyberlink比較起來,我還是比較喜歡Cyberlink的,畫面設計的比較面善,log吐出來的資訊較完整。至於功能面目前看來還差不多(還在研究中...)
依官網頁面Getting Strated先來試試看程式的結構性,恩!感覺好像要先啟一個UPnPService,這個Service可以是ControlPoint 或 Device?繼續看下去囉!
1.UpnpService upnpService = new UpnpServiceImp();
-實作一個UPnP Stack,有了這個stack,可以拿來做controlpoint(cling指client)及device(cling指server)
-不要了,就upnpService.shutdown()來切斷所有upnp network連線並通知大家byebye
2.兩個建構子
UpnpService upnpService = new UpnpServiceImp(RegisterListener...)
-馬上實作一個instance
UpnpService upnpService = new UpnpServiceImp(new DefaultUpnpServiceConfiguration(8081))
-DefaultUpnpServiceConfiguration也是一個介面
3.實作controlpoint
upnpService.getControlPoint()
若要search device
-upnpService.getControlPoint.search(new STAllHeader()) ->找所有device
(效果和upnpService.getControlPoint.search()一樣)
-upnpService.getControlPoint.search(new UDNHeader(udn)) ->針對某個udn
4.UDA vs. namespace
UDA是followUPnP Device Architecture下的命名規則
namespace則是依照vendor自行定義的
UPnP Service下有兩個重要元件
-state variable
-action
2012年5月16日 星期三
android handler+message 之使用
之前在寫一支程式,為了將Cyberlink UPnP API的 NotifyListener 有SSDP message丟進來時,將其丟至UI Thread,但會出現Only the original thread that created a view hierarchy can touch its views.錯誤訊息。大致上是說非UI Thread不能去更新View(參考),需利用handler來處理。
package com.example;
import java.util.Timer;
import java.util.TimerTask;
import org.cybergarage.upnp.ControlPoint;
import org.cybergarage.upnp.device.NotifyListener;
import org.cybergarage.upnp.ssdp.SSDPPacket;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;
public class UPnPOnAndroid3Activity extends Activity {
/** Called when the activity is first created. */
private MyHandler mHandler;
private TextView tView;
private int i=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tView=(TextView)findViewById(R.id.textView1);
tView.setMovementMethod(ScrollingMovementMethod.getInstance()); //textview可以捲動(參考)
mHandler = new MyHandler();
ControlPoint cPoint = new ControlPoint();
if(cPoint.start()){
tView.append("Start...\n");
}else{
tView.append("Stop...\n");
cPoint.stop();
}
cPoint.addNotifyListener(new NotifyListener() {
public void deviceNotifyReceived(SSDPPacket arg0) {
// TODO Auto-generated method stub
Message msg = new Message();
msg.obj=arg0; //將送來的SSDPPacket丟到msg.obj
mHandler.sendMessage(msg); //透過Handler來傳message
}
});
}
private class MyHandler extends Handler{
public void handleMessage(Message msg){
super.handleMessage(msg); //透過Handler收message
tView.append(msg.obj + "\n"); //print至textview
}
}
}
package com.example;
import java.util.Timer;
import java.util.TimerTask;
import org.cybergarage.upnp.ControlPoint;
import org.cybergarage.upnp.device.NotifyListener;
import org.cybergarage.upnp.ssdp.SSDPPacket;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;
public class UPnPOnAndroid3Activity extends Activity {
/** Called when the activity is first created. */
private MyHandler mHandler;
private TextView tView;
private int i=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tView=(TextView)findViewById(R.id.textView1);
tView.setMovementMethod(ScrollingMovementMethod.getInstance()); //textview可以捲動(參考)
mHandler = new MyHandler();
ControlPoint cPoint = new ControlPoint();
if(cPoint.start()){
tView.append("Start...\n");
}else{
tView.append("Stop...\n");
cPoint.stop();
}
cPoint.addNotifyListener(new NotifyListener() {
public void deviceNotifyReceived(SSDPPacket arg0) {
// TODO Auto-generated method stub
Message msg = new Message();
msg.obj=arg0; //將送來的SSDPPacket丟到msg.obj
mHandler.sendMessage(msg); //透過Handler來傳message
}
});
}
private class MyHandler extends Handler{
public void handleMessage(Message msg){
super.handleMessage(msg); //透過Handler收message
tView.append(msg.obj + "\n"); //print至textview
}
}
}
2012年5月15日 星期二
Endnote X5 上課心得
昨日上"博碩論文資料庫研習"時有提到Endnote這套參考文獻管理工具,聽起來蠻方便的,還可以節省不少word編排時間,今天剛好"智財權與參考文獻管理"有教,就來圖書館二樓資訊素養教室聽課囉!
一開始上課,老師先大致上說明"引用"與"抄襲"的差異(其實真的只有一線之隔),且目前校內有一套TurnItIn(反抄襲系統)供學生與老師使用,可以讓使用者了解我們寫的這篇論文,和別人的論文"相似度"多少,有些老師會規定相似度需要在多少百分比之下才可以接受。
接著老師提到寫論文時,參考文獻的格式也是很重要的。如文學院的論文會用Footnote,內文提到的參考文獻和這些參考文獻出處於同一頁面;而工學院的論會用Endnote,則是內文提到的參考文獻會放在論文的最後一頁。另外還有APA(商學院)、Chicago、IEEE(理工學院)等參考文獻格式。
來到今日的重頭戲了,Endnote的介紹,首先到學校網路教室下載Endnote X5(需要學號&密碼,所以校外人士只能去谷歌搜尋看看囉!)。解壓縮時需留意裡面會有一個license的檔,不能隨意砍掉,要不然會沒有版權而造成無法使用。
安裝好並開啟後(安裝時需將word關掉,因它會裝word plugin),我們在一般論文資料庫(台灣博碩士論文、IEEE、ACM...)找到的參考文獻,將它匯入endnote,通常在這些資料庫搜尋完,都有會有類似輸出論文的按鈕,這時我們選擇endnote格式(有些還需要選擇UTF-8格式),此時在endnote上就會出現我們想要的參考文獻囉!不過有些資料庫同時間可輸出多筆(台灣博碩士論文、IEEE、Web of Sciences...),有些只能點選單一論文,才能匯出(ACM、Springerlink...)。
最後我整理一下Endnote好用的地方:
1.參考文獻的輸出格式可以改(APA -> IEEE),當然也可以自行定義或修改IEEE格式裡的其中幾個欄位(
2. 可以附加全文(預設沒有),更好用的是,它可以自行搜尋全文,但如果Endnote找不到,也不一定就表示資料庫沒有提供,這時只好自已花點時間去找囉!
3.可以將pdf匯入Endnote,若PDF的格式Endnote可以辨識格式,它會主動將論文作者、出處、摘要等資訊加入相關欄位,但也不一定是百分之百可行,通常PDF裡有DOI(類似這篇PDF的身份證)成功機率比較大些。
4.若PDF匯入時,無法辨識格式,那可以利用PDF&QuickEdit來編輯相關欄位,也可以透過這個功能來study paper,因為它有注解、劃線的功能,還不錯。
5.若寫論文時花比較久的時間,有時這些文獻可能會被重覆匯入,此時可利用References -> Find Duplicates來刪除重覆的文獻。
6.和word做整合,當我們一邊寫論文時,就可以一邊利用Endnote將參考文獻插入內文中,並且會幫忙做格式的編排,但記得交卷時,需將格式轉成一般word格式,不要帶Endnote code在word裡,否則老師看你的論文若電腦沒有安裝Endnote,會出現亂碼。
感謝老師的教學,又長知識了。
PS:另外老師還提到,其實可以利用這篇參考文獻的"被參考次數及引用論文"和"此篇參考的其它文獻"來當成自已的資源,尤其是Web of Sciences,這方面做的不錯,且和Endnote整合度最高(據說是同一家軟體商寫的)
一開始上課,老師先大致上說明"引用"與"抄襲"的差異(其實真的只有一線之隔),且目前校內有一套TurnItIn(反抄襲系統)供學生與老師使用,可以讓使用者了解我們寫的這篇論文,和別人的論文"相似度"多少,有些老師會規定相似度需要在多少百分比之下才可以接受。
接著老師提到寫論文時,參考文獻的格式也是很重要的。如文學院的論文會用Footnote,內文提到的參考文獻和這些參考文獻出處於同一頁面;而工學院的論會用Endnote,則是內文提到的參考文獻會放在論文的最後一頁。另外還有APA(商學院)、Chicago、IEEE(理工學院)等參考文獻格式。
來到今日的重頭戲了,Endnote的介紹,首先到學校網路教室下載Endnote X5(需要學號&密碼,所以校外人士只能去谷歌搜尋看看囉!)。解壓縮時需留意裡面會有一個license的檔,不能隨意砍掉,要不然會沒有版權而造成無法使用。
安裝好並開啟後(安裝時需將word關掉,因它會裝word plugin),我們在一般論文資料庫(台灣博碩士論文、IEEE、ACM...)找到的參考文獻,將它匯入endnote,通常在這些資料庫搜尋完,都有會有類似輸出論文的按鈕,這時我們選擇endnote格式(有些還需要選擇UTF-8格式),此時在endnote上就會出現我們想要的參考文獻囉!不過有些資料庫同時間可輸出多筆(台灣博碩士論文、IEEE、Web of Sciences...),有些只能點選單一論文,才能匯出(ACM、Springerlink...)。
最後我整理一下Endnote好用的地方:
1.參考文獻的輸出格式可以改(APA -> IEEE),當然也可以自行定義或修改IEEE格式裡的其中幾個欄位(
2. 可以附加全文(預設沒有),更好用的是,它可以自行搜尋全文,但如果Endnote找不到,也不一定就表示資料庫沒有提供,這時只好自已花點時間去找囉!
3.可以將pdf匯入Endnote,若PDF的格式Endnote可以辨識格式,它會主動將論文作者、出處、摘要等資訊加入相關欄位,但也不一定是百分之百可行,通常PDF裡有DOI(類似這篇PDF的身份證)成功機率比較大些。
4.若PDF匯入時,無法辨識格式,那可以利用PDF&QuickEdit來編輯相關欄位,也可以透過這個功能來study paper,因為它有注解、劃線的功能,還不錯。
5.若寫論文時花比較久的時間,有時這些文獻可能會被重覆匯入,此時可利用References -> Find Duplicates來刪除重覆的文獻。
6.和word做整合,當我們一邊寫論文時,就可以一邊利用Endnote將參考文獻插入內文中,並且會幫忙做格式的編排,但記得交卷時,需將格式轉成一般word格式,不要帶Endnote code在word裡,否則老師看你的論文若電腦沒有安裝Endnote,會出現亂碼。
感謝老師的教學,又長知識了。
PS:另外老師還提到,其實可以利用這篇參考文獻的"被參考次數及引用論文"和"此篇參考的其它文獻"來當成自已的資源,尤其是Web of Sciences,這方面做的不錯,且和Endnote整合度最高(據說是同一家軟體商寫的)
2012年4月26日 星期四
java string pattern
若有一組電話字串,該如何比對其中幾個數(如308)
package com.example;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sun.corba.se.spi.orbutil.fsm.Input;
public class StringPattern1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String inputString = "0911308380"; //原始字串
Pattern pattern = Pattern.compile("308"); //比對字串308
Matcher matcher = pattern.matcher(inputString); //要拿原始字串和比對字串做比較
if(matcher.find()){
System.out.println("got it");
}else{
System.out.println("no match");
}
}
}
參考Gossip
package com.example;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sun.corba.se.spi.orbutil.fsm.Input;
public class StringPattern1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String inputString = "0911308380"; //原始字串
Pattern pattern = Pattern.compile("308"); //比對字串308
Matcher matcher = pattern.matcher(inputString); //要拿原始字串和比對字串做比較
if(matcher.find()){
System.out.println("got it");
}else{
System.out.println("no match");
}
}
}
參考Gossip
2012年4月25日 星期三
android Permission denied
今天好不容易解決了android project使用外部jar(clink210.jar)的問題,原因是在java build path裡的Order and Export,需將加入的外部jar打勾,預設是沒有勾選的。
但實作上發現,upnp control point並沒有啟動
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tView = (TextView)findViewById(R.id.resultTV);
ControlPoint cPoint = new ControlPoint();
tView.append(String.valueOf(cPoint.start())); --> false,表示沒有start( )成功
tView.append(String.valueOf(cPoint.stop())); --> true
於是使用logcat查看,其中CyberGarage被permission denied
04-26 10:57:03.010: I/System.out(12701): CyberGarage warning : Permission denied
04-26 10:57:03.010: I/System.out(12701): java.net.SocketException: Permission denied
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getAllInterfaceAddressesImpl(Native Method)
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getNetworkInterfacesImpl(NetworkInterface.java:62)
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getNetworkInterfacesList(NetworkInterface.java:241)
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getNetworkInterfaces(NetworkInterface.java:237)
谷歌的結果,是說因CyberGarage會使用到internet服務,需將internet service打開。
在AndroidManifest.xml裡,將權限加入即可,如下:
參考
但實作上發現,upnp control point並沒有啟動
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tView = (TextView)findViewById(R.id.resultTV);
ControlPoint cPoint = new ControlPoint();
tView.append(String.valueOf(cPoint.start())); --> false,表示沒有start( )成功
tView.append(String.valueOf(cPoint.stop())); --> true
於是使用logcat查看,其中CyberGarage被permission denied
04-26 10:57:03.010: I/System.out(12701): CyberGarage warning : Permission denied
04-26 10:57:03.010: I/System.out(12701): java.net.SocketException: Permission denied
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getAllInterfaceAddressesImpl(Native Method)
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getNetworkInterfacesImpl(NetworkInterface.java:62)
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getNetworkInterfacesList(NetworkInterface.java:241)
04-26 10:57:03.010: I/System.out(12701): at java.net.NetworkInterface.getNetworkInterfaces(NetworkInterface.java:237)
谷歌的結果,是說因CyberGarage會使用到internet服務,需將internet service打開。
在AndroidManifest.xml裡,將權限加入即可,如下:
Ann's雜誌
android的apk該如解壓縮
今日將cyberlink的clink210.jar丟到android project去跑時,出現錯誤如下
04-25 17:15:50.130: W/dalvikvm(8918): threadid=1: thread exiting with uncaught exception (group=0x40275578)
04-25 17:15:50.130: E/AndroidRuntime(8918): FATAL EXCEPTION: main
04-25 17:15:50.130: E/AndroidRuntime(8918): java.lang.IllegalStateException: Could not execute method of the activity
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View$1.onClick(View.java:2178)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View.performClick(View.java:2574)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View$PerformClick.run(View.java:9223)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.os.Handler.handleCallback(Handler.java:587)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.os.Handler.dispatchMessage(Handler.java:92)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.os.Looper.loop(Looper.java:130)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.app.ActivityThread.main(ActivityThread.java:3691)
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invoke(Method.java:507)
04-25 17:15:50.130: E/AndroidRuntime(8918): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
04-25 17:15:50.130: E/AndroidRuntime(8918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
04-25 17:15:50.130: E/AndroidRuntime(8918): at dalvik.system.NativeStart.main(Native Method)
04-25 17:15:50.130: E/AndroidRuntime(8918): Caused by: java.lang.reflect.InvocationTargetException
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invoke(Method.java:507)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View$1.onClick(View.java:2173)
04-25 17:15:50.130: E/AndroidRuntime(8918): ... 11 more
04-25 17:15:50.130: E/AndroidRuntime(8918): Caused by: java.lang.NoClassDefFoundError: org.cybergarage.upnp.ControlPoint
04-25 17:15:50.130: E/AndroidRuntime(8918): at com.android.example.UpnpOnAndroidActivity.searchOnClick(UpnpOnAndroidActivity.java:30)
04-25 17:15:50.130: E/AndroidRuntime(8918): ... 14 more
04-25 17:15:52.140: I/dalvikvm(8918): threadid=4: reacting to signal 3
04-25 17:15:52.140: I/dalvikvm(8918): Wrote stack traces to '/data/anr/traces.txt'
好像是找不到clink.jar裡的org.cybergarage.upnp.ControlPoint?上google查了一些資料(1,2),也試過該如何import clink210.jar才是正確,但到目前為止都是相同錯訊息。於是就想去看看輸出的apk是否有將clink210.jar包進去?
解apk的步驟如下:
1.下載apktool.jar & apktool-install-windows
2.解壓縮apktool-install-windows至任意資料匣,apktool.jar也放在裡頭
3.apktool d xxx.apk output
解apk的結果,看到下列目錄
-res
-smali
AndroidManifest.xml
apktool.yml
找了一下,並無我想看到的,是否clink210.jar有包在裡頭。
04-25 17:15:50.130: W/dalvikvm(8918): threadid=1: thread exiting with uncaught exception (group=0x40275578)
04-25 17:15:50.130: E/AndroidRuntime(8918): FATAL EXCEPTION: main
04-25 17:15:50.130: E/AndroidRuntime(8918): java.lang.IllegalStateException: Could not execute method of the activity
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View$1.onClick(View.java:2178)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View.performClick(View.java:2574)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View$PerformClick.run(View.java:9223)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.os.Handler.handleCallback(Handler.java:587)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.os.Handler.dispatchMessage(Handler.java:92)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.os.Looper.loop(Looper.java:130)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.app.ActivityThread.main(ActivityThread.java:3691)
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invoke(Method.java:507)
04-25 17:15:50.130: E/AndroidRuntime(8918): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
04-25 17:15:50.130: E/AndroidRuntime(8918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
04-25 17:15:50.130: E/AndroidRuntime(8918): at dalvik.system.NativeStart.main(Native Method)
04-25 17:15:50.130: E/AndroidRuntime(8918): Caused by: java.lang.reflect.InvocationTargetException
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 17:15:50.130: E/AndroidRuntime(8918): at java.lang.reflect.Method.invoke(Method.java:507)
04-25 17:15:50.130: E/AndroidRuntime(8918): at android.view.View$1.onClick(View.java:2173)
04-25 17:15:50.130: E/AndroidRuntime(8918): ... 11 more
04-25 17:15:50.130: E/AndroidRuntime(8918): Caused by: java.lang.NoClassDefFoundError: org.cybergarage.upnp.ControlPoint
04-25 17:15:50.130: E/AndroidRuntime(8918): at com.android.example.UpnpOnAndroidActivity.searchOnClick(UpnpOnAndroidActivity.java:30)
04-25 17:15:50.130: E/AndroidRuntime(8918): ... 14 more
04-25 17:15:52.140: I/dalvikvm(8918): threadid=4: reacting to signal 3
04-25 17:15:52.140: I/dalvikvm(8918): Wrote stack traces to '/data/anr/traces.txt'
好像是找不到clink.jar裡的org.cybergarage.upnp.ControlPoint?上google查了一些資料(1,2),也試過該如何import clink210.jar才是正確,但到目前為止都是相同錯訊息。於是就想去看看輸出的apk是否有將clink210.jar包進去?
解apk的步驟如下:
1.下載apktool.jar & apktool-install-windows
2.解壓縮apktool-install-windows至任意資料匣,apktool.jar也放在裡頭
3.apktool d xxx.apk output
解apk的結果,看到下列目錄
-res
-smali
AndroidManifest.xml
apktool.yml
找了一下,並無我想看到的,是否clink210.jar有包在裡頭。
2012年4月23日 星期一
如何使用eclipse直接上android code於實體手機測試
1.確認eclipse的OS平台有無安裝手機的driver
2.確認adb(D:\eclipse\android sdk\platform-tools)有無在環境變數下
-adb主要用來除錯用
3.於eclipse android專案下,於AndroidManifest.xml的<activity ... > 加入android:debuggable="true"
[2012-04-24 14:08:48 - MyHelloWorld] Please execute 'adb uninstall com.example' in a shell.
[2012-04-24 14:08:48 - MyHelloWorld] Launch canceled!
照做,就成功囉!
參考
走不到的世界線
Tsung's blog
android developer
2.確認adb(D:\eclipse\android sdk\platform-tools)有無在環境變數下
-adb主要用來除錯用
3.於eclipse android專案下,於AndroidManifest.xml的<activity ... > 加入android:debuggable="true"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...略
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MyHelloWorldActivity"
android:label="@string/app_name"
android:debuggable="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
...略
</manifest>
4.手機上,將設定 → 應用程式 → 開發 → USB 除錯 打勾
理論上,執行完這4個步驟就可以了。但我在執行時,還遇到eclipse跳出error
[2012-04-24 14:08:48 - MyHelloWorld] Please execute 'adb uninstall com.example' in a shell.
[2012-04-24 14:08:48 - MyHelloWorld] Launch canceled!
照做,就成功囉!
參考
走不到的世界線
Tsung's blog
android developer
訂閱:
意見 (Atom)
