- 浏览: 3049386 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
上次摸Google Android的模拟器已经是去年这玩意刚发布没多久的时候了。嘛,本来我也没太着急在Android上做开发。这个学期开学之后,我们这边的毕业设计也正式开始了。
邵栋老师带了几个组是做Android应用程序开发的课题的。正好附近两个宿舍都有人是做这个课题的。语仔他们组想做的是一个*个人理财软件*,之前就在国内的一些Android开发论坛到处看啊找啊,在学习相关技术知识。不过前几天碰到了很奇怪的NullPointerException,问我怎么办。这样我也就又摸出Android来玩了。
正好3月3号Google更新了Android SDK到m5-rc15,而我之前用的SDK都不记得是m多少的了(m3?),干脆就连SDK和Eclipse+ADT都一并更新过来。
到Eclipse官网去看,现在的版本已经到3.3.2了。正好连机上的别的Eclipse也一起更新。先是下了Eclipse Classic 3.3.2,结果到安装ADT的时候出现require "org.eclipse.wst.sse.ui"的错误。很明显是要装WTP了。以前装过的老版本的ADT明明不需要的……
装WTP就得连什么GEF啊之类的一堆东西都分别装上。嫌麻烦,就重新下了个Eclipse IDE for Java Developers。然后安装ADT就没问题了。
顺带记下官网对于安装ADT插件的说明:
===========================================================================
关于某NPE问题
OK,东西都装上了,开始解决问题。之前语仔遇到的NPE是基于这样的代码:
/src/com/my/MyActivity.java:
/res/layout/main.xml:
这代码看起来似乎没什么问题。我之前又没怎么看过Android的教程或者文档之类的东西,觉得不知道该从何入手。总之第一能想到的就是看看stack trace;但当在Android里遇到异常时,它就这么在屏幕上显示个简单的提示:
(这图是我另外开的一个project,故意引发了一个NPE而已……)
感觉好可怜,啥也看不出来。
然后查了下如何向输出写自定义的log,发现android.util.Log类可以做这件事。用Log.v(/*String*/tag, /*String*/message, /*Throwable*/obj)就能把日志写出来。这个静态的Log.v()方法用于输出VERBOSE级日志,其中包括了stack trace。输出的目标是logcat。
那么把前面的Java代码中onCreate()方法里的内容整个用try-block包起来,然后catch Exception并将异常状况写到log里。然后运行……没看到NPE了,但那个按钮里的代码却没起作用。在Eclipse里的output窗口也没看到任何log,超郁闷。
没办法,又查了下如何查看日志。发现在android_sdk/tools目录有一个叫DDMS的程序。执行它,并且执行其中的logcat就能看到日志。于是终于看到了那个NPE的位置:在onCreate()方法中的confirm.setOnClickListener(o);这行。
接下来,在onCreate()方法里另外加了句log,当o为null的时候输出一句话;然后没看到输出。这才发现confirm是null……觉得超诡异,大家都是这么findViewById()来得到layout中指定的UI组件的引用,这里怎么会null了呢。
然后才发觉在M3到M5的变化的文档中有提到,原本在layout的XML文件里的id的属性,要改为使用前缀的android:id。于是把main.xml改过来,就好了
T T
更详细的API变化,看这里:http://code.google.com/android/migrating/m3-to-m5/changes.html
===========================================================================
关于模拟器总是disconnect的问题
语仔从Eclipse运行Android模拟器的时候总是会出现disconnected现象,非得多run几次才好。我也不知道是为什么。
不过后来发觉实在不行的话就干脆不要从Eclipse启动模拟器了……直接“热安装”就是
在Eclipse里把代码写好,保存了之后,这么做:
1. 任意启动一个Android模拟器进程,在“热安装”之前最好让它处于home状态
2. 在命令行,转到项目的/bin目录,然后用adb直接把程序装上去:
3. 程序已经“热安装”完成。可以从Android界面里的ALL那边运行新装的程序看看
装新的apk或者更新旧的apk都可以这样……至少,只要有一次能正常从Eclipse启动模拟器的话,就让它一直开着,然后不停把修改过的apk文件这么“热安装”上去就行了……
=_=|||
===========================================================================
关于log的问题
前天给语仔找NPE的原因时,傻乎乎的另外开了一个DDMS来监视logcat的日志。我应该更加信赖ADT的……
实际上在Eclipse装了ADT之后,在Windows > Preferences > Android > DDMS > Advanced里就可以设置监听log的等级。把等级设到Verbose就能看到全部的log了。我是用Log.v()来输出的,所以不调到这个等级就看不到之前写的那log。诶,果然还是应该多看看文档再说的。
===========================================================================
关于Notepad Tutorial
Google Android官网上有个不错的教程,Tutorial: A Notepad Application。跟着这个教程走就能了解到Android开发中的许多重要方面,像是Activity的使用(包括sub activity的使用),Intent的使用,SQLite的使用,使用XML的layout、resource、manifest,整个应用程序的流程/生命周期(life-cycle)等。我也跟着这个教程做了一遍,做到Notepad v3。下面这张是运行的截图:
关于life-cycle,这几个方法很重要:
当然这个地方说得更详细一些:Life Cycle of an Android Application
===========================================================================
关于卸载Android模拟器中已经安装了的程序
在启动了一个Android模拟器进程之后,在命令行使用adb来卸载已经安装的程序:(一定要启动至少一个模拟器实例)
这样就把前面装的Notepad v1和v2都卸载了。清爽。
===========================================================================
其它
不知道实际的Dalvik VM在手机上跑速度如何呢,在模拟器上感觉还可以。只是模拟器的启动时间总是很长……
不过在我的机上跑模拟器明显比在语仔机上要快。不知道是不是因为我这边没怎么装游戏的缘故……
呵呵,开发机与游戏机总是无法并存的,除非开发的就是游戏……|||
邵栋老师带了几个组是做Android应用程序开发的课题的。正好附近两个宿舍都有人是做这个课题的。语仔他们组想做的是一个*个人理财软件*,之前就在国内的一些Android开发论坛到处看啊找啊,在学习相关技术知识。不过前几天碰到了很奇怪的NullPointerException,问我怎么办。这样我也就又摸出Android来玩了。
正好3月3号Google更新了Android SDK到m5-rc15,而我之前用的SDK都不记得是m多少的了(m3?),干脆就连SDK和Eclipse+ADT都一并更新过来。
到Eclipse官网去看,现在的版本已经到3.3.2了。正好连机上的别的Eclipse也一起更新。先是下了Eclipse Classic 3.3.2,结果到安装ADT的时候出现require "org.eclipse.wst.sse.ui"的错误。很明显是要装WTP了。以前装过的老版本的ADT明明不需要的……
装WTP就得连什么GEF啊之类的一堆东西都分别装上。嫌麻烦,就重新下了个Eclipse IDE for Java Developers。然后安装ADT就没问题了。
顺带记下官网对于安装ADT插件的说明:
引用
To download and install the ADT plugin, follow the steps below.
[list]Start Eclipse, then select Help > Software Updates > Find and Install....
In the dialog that appears, select Search for new features to install and press Next.
Press New Remote Site.
In the resulting dialog box, enter a name for the remote site (e.g. Android Plugin) and enter this as its URL:
Press OK.You should now see the new site added to the search list (and checked). Press Finish.
In the subsequent Search Results dialog box, select the checkbox for Android Plugin > Developer Tools. This will check both features: "Android Developer Tools", and "Android Editors". The Android Editors feature is optional, but recommended. If you choose to install it, you need the WST plugin mentioned earlier in this page.
Now press Next.
Read the license agreement and then select Accept terms of the license agreement, if appropriate. Press Next.
Press Finish.
The ADT plugin is not signed; you can accept the installation anyway by pressing Install All.
Restart Eclipse.
After restart, update your Eclipse preferences to point to the SDK directory:
1. Select Window > Preferences... to open the Preferences panel. (Mac OS X: Eclipse > Preferences)
2. Select Android from the left panel.
3. For the SDK Location in the main panel, press Browse... and locate the SDK directory.
4. Press Apply, then OK.[/list]
[list]
https://dl-ssl.google.com/android/eclipse/
Press OK.
1. Select Window > Preferences... to open the Preferences panel. (Mac OS X: Eclipse > Preferences)
2. Select Android from the left panel.
3. For the SDK Location in the main panel, press Browse... and locate the SDK directory.
4. Press Apply, then OK.[/list]
===========================================================================
关于某NPE问题
OK,东西都装上了,开始解决问题。之前语仔遇到的NPE是基于这样的代码:
/src/com/my/MyActivity.java:
package com.my; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MyActivity extends Activity { private EditText edAdmin = null; private EditText edPassword = null; private Button confirm = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); edAdmin = (EditText) findViewById(R.id.Admin); edPassword = (EditText) findViewById(R.id.Password); confirm = (Button) findViewById(R.id.confirm); confirm.setOnClickListener(o); } private OnClickListener o = new OnClickListener() { public void onClick(View v) { //... } }; }
/res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, MyProject" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Admin1" /> <EditText id="@+id/Admin" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Admin2" /> <EditText id="@+id/Password" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button id="@+id/confirm" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="confirm" /> </LinearLayout>
这代码看起来似乎没什么问题。我之前又没怎么看过Android的教程或者文档之类的东西,觉得不知道该从何入手。总之第一能想到的就是看看stack trace;但当在Android里遇到异常时,它就这么在屏幕上显示个简单的提示:
(这图是我另外开的一个project,故意引发了一个NPE而已……)
感觉好可怜,啥也看不出来。
然后查了下如何向输出写自定义的log,发现android.util.Log类可以做这件事。用Log.v(/*String*/tag, /*String*/message, /*Throwable*/obj)就能把日志写出来。这个静态的Log.v()方法用于输出VERBOSE级日志,其中包括了stack trace。输出的目标是logcat。
那么把前面的Java代码中onCreate()方法里的内容整个用try-block包起来,然后catch Exception并将异常状况写到log里。然后运行……没看到NPE了,但那个按钮里的代码却没起作用。在Eclipse里的output窗口也没看到任何log,超郁闷。
没办法,又查了下如何查看日志。发现在android_sdk/tools目录有一个叫DDMS的程序。执行它,并且执行其中的logcat就能看到日志。于是终于看到了那个NPE的位置:在onCreate()方法中的confirm.setOnClickListener(o);这行。
接下来,在onCreate()方法里另外加了句log,当o为null的时候输出一句话;然后没看到输出。这才发现confirm是null……觉得超诡异,大家都是这么findViewById()来得到layout中指定的UI组件的引用,这里怎么会null了呢。
然后才发觉在M3到M5的变化的文档中有提到,原本在layout的XML文件里的id的属性,要改为使用前缀的android:id。于是把main.xml改过来,就好了
T T
更详细的API变化,看这里:http://code.google.com/android/migrating/m3-to-m5/changes.html
===========================================================================
关于模拟器总是disconnect的问题
语仔从Eclipse运行Android模拟器的时候总是会出现disconnected现象,非得多run几次才好。我也不知道是为什么。
不过后来发觉实在不行的话就干脆不要从Eclipse启动模拟器了……直接“热安装”就是
在Eclipse里把代码写好,保存了之后,这么做:
1. 任意启动一个Android模拟器进程,在“热安装”之前最好让它处于home状态
2. 在命令行,转到项目的/bin目录,然后用adb直接把程序装上去:
adb install yourProject.apk
3. 程序已经“热安装”完成。可以从Android界面里的ALL那边运行新装的程序看看
装新的apk或者更新旧的apk都可以这样……至少,只要有一次能正常从Eclipse启动模拟器的话,就让它一直开着,然后不停把修改过的apk文件这么“热安装”上去就行了……
=_=|||
===========================================================================
关于log的问题
前天给语仔找NPE的原因时,傻乎乎的另外开了一个DDMS来监视logcat的日志。我应该更加信赖ADT的……
实际上在Eclipse装了ADT之后,在Windows > Preferences > Android > DDMS > Advanced里就可以设置监听log的等级。把等级设到Verbose就能看到全部的log了。我是用Log.v()来输出的,所以不调到这个等级就看不到之前写的那log。诶,果然还是应该多看看文档再说的。
===========================================================================
关于Notepad Tutorial
Google Android官网上有个不错的教程,Tutorial: A Notepad Application。跟着这个教程走就能了解到Android开发中的许多重要方面,像是Activity的使用(包括sub activity的使用),Intent的使用,SQLite的使用,使用XML的layout、resource、manifest,整个应用程序的流程/生命周期(life-cycle)等。我也跟着这个教程做了一遍,做到Notepad v3。下面这张是运行的截图:
关于life-cycle,这几个方法很重要:
// Called when the activity is first created. public void onCreate(Bundle icicle) // called by Android if the Activity is being stopped and may be killed before it is resumed! // complement of onCreate() protected void onFreeze(Bundle outState) // called when the Activity ends // should release any resources that can be released protected void onPause() // complement of onPause() protected void onResume()
当然这个地方说得更详细一些:Life Cycle of an Android Application
===========================================================================
关于卸载Android模拟器中已经安装了的程序
在启动了一个Android模拟器进程之后,在命令行使用adb来卸载已经安装的程序:(一定要启动至少一个模拟器实例)
D:\android\android-sdk_m5-rc15_windows\tools>adb shell # cd /data/app cd /data/app # ls ls Notepadv3.apk ApiDemos.apk Notepadv1.apk Notepadv2.apk # rm Notepadv1.apk rm Notepadv1.apk # rm Notepadv2.apk rm Notepadv2.apk # exit exit
这样就把前面装的Notepad v1和v2都卸载了。清爽。
===========================================================================
其它
不知道实际的Dalvik VM在手机上跑速度如何呢,在模拟器上感觉还可以。只是模拟器的启动时间总是很长……
不过在我的机上跑模拟器明显比在语仔机上要快。不知道是不是因为我这边没怎么装游戏的缘故……
呵呵,开发机与游戏机总是无法并存的,除非开发的就是游戏……|||
评论
4 楼
RednaxelaFX
2008-03-08
惭愧,一开始没想debug,一个是因为对Andriod SDK/ADT还不熟悉,另一个是很多时候看看log也就能解决问题了...
可能是被这样的习惯害的吧: 平时写Java应用的时候,如果不确定会出现些什么问题,可能会直接throws Exception,然后跑一下看看会不会出现异常,出现的话就直接会看到stack trace了;而有时候即使确定会出现些什么问题,还是可能会习惯性用e.printStackTrace()来看看stack trace.习惯了这样,而Android的模拟器里只给出那么句错误信息,就不习惯了...然后习惯性的想看看stack trace,就这样 ^ ^
可能是被这样的习惯害的吧: 平时写Java应用的时候,如果不确定会出现些什么问题,可能会直接throws Exception,然后跑一下看看会不会出现异常,出现的话就直接会看到stack trace了;而有时候即使确定会出现些什么问题,还是可能会习惯性用e.printStackTrace()来看看stack trace.习惯了这样,而Android的模拟器里只给出那么句错误信息,就不习惯了...然后习惯性的想看看stack trace,就这样 ^ ^
3 楼
mwjian
2008-03-08
呵呵,遇到问题干嘛不debug呢?直接就找到出错的位置。如果不能,模拟器也提供了一个工具来定位出错的代码,DevTools > Exception Browser
2 楼
seya
2008-03-05
那个模拟器效率真是底,慢的不行。
1 楼
seya
2008-03-05
有时候在启动模拟器的情况下,用adb devices命令,显示出的emulator-list却为空。
发表评论
-
Pro Android笔记
2010-01-16 15:50 0Pro Android, Chap 1, "Delv ... -
Dalvik的类装载与运行时结构
2009-04-10 11:02 0dalvik/libdex/DexClass.h /* exp ... -
Dalvik的指令集与其执行
2009-04-10 10:56 0Dalvik的指令集与其执行 Java .class文件中的 ... -
关于Dalvik的一些笔记
2009-03-31 02:36 0引用Dalvik The Android platf ... -
关于Google Android,第一印象
2007-11-16 12:38 2713Android - An Open Handset Allia ...
相关推荐
总的来说,"玩转 Android MediaPlayer之视频预加载(优化)"是关于如何在Android平台上利用MediaPlayer组件,结合网络条件、硬件能力、错误处理等多个方面,实现视频的高效预加载,提升播放体验的技术探讨。...
【Android扫雷游戏开发详解...通过这个项目,你可以从零开始学习Android应用开发,逐步掌握各个核心知识点,并最终完成一个可玩的扫雷游戏。这个过程将加深你对Android框架的理解,为后续的复杂应用开发打下坚实基础。
在Android平台上,尽管并非所有设备都支持Force Touch,但对于那些具备压感硬件的设备,开发者可以利用这一特性来增加应用的深度和可玩性。 在Android中实现Force Touch功能,主要涉及到`PressureSensitiveView`和`...
【标题】"jetboy android游戏 源码"所涉及的知识点主要集中在Android游戏开发上,特别是使用Eclipse IDE和Android SDK 1.6版本进行的项目开发。这是一个基于Java编程语言的游戏源码,让我们来深入探讨一下相关的核心...
在这个项目中,作者通过一个月的实训,将贪吃蛇这个游戏的经典玩法移植到了Android设备上。 【描述】"java写的Android贪食蛇小游戏,实训一个月的成果,欢迎大家下载参考"意味着这个项目是作者通过实际操作和学习,...
"Android超级玛丽源码"是一个典型的移动游戏开发示例,它基于经典游戏《超级玛丽》的玩法,通过Android平台实现了这一经典游戏的复刻。这份源码对于学习Android游戏开发、了解游戏引擎原理以及掌握Java编程技巧都有...
【标题】:“javadds_android源码_”指向的可能是一个基于Java开发的Android游戏源码,可能是“Whack-a-Mole”(打地鼠)游戏的实现。在Android开发中,源码通常包含了项目的全部代码,是理解项目结构、功能实现和...
【Android应用源码---麻将消消乐.zip】是一款基于Android平台开发的游戏源码,主要以经典游戏"开心消消乐"为灵感,提供了一个麻将消除的玩法。此资源包含200个精心设计的关卡,是学习和研究Android游戏开发的宝贵...
在Android平台上,实现AR效果主要依靠ARKit或者Google的ARCore库。 ARCore是Google开发的一个平台,用于构建AR应用程序,它支持多种Android设备。ARCore的主要功能包括: 1. **环境理解**:ARCore可以检测并理解...
【Android成语连连看游戏项目源代码】是一款基于Android平台开发的休闲益智游戏,它将中国传统文化中的成语融入到连连看玩法中,旨在提供一种寓教于乐的学习体验。通过这个游戏,用户不仅可以享受连连看的乐趣,还能...
通过这个项目,开发者不仅能制作出一款可玩的“俄罗斯方块”游戏,还能深入掌握Android开发的关键技能。对于初学者而言,这是一个极好的实践平台,对于经验丰富的开发者来说,也是一个重温基础和探索新技巧的好机会...
总结来说,通过分析Android Studio下的2048游戏源码,开发者不仅可以了解Android应用的基本架构,还能掌握游戏逻辑的编程技巧,包括事件处理、数据结构(如二维数组)、UI更新以及动画效果的实现。这样的实践对于...
【Android五子棋】是一款基于Android平台开发的棋类游戏,实现了经典的五子棋玩法,可供两位玩家在手机上对弈。游戏的核心是通过编程逻辑模拟棋盘上的棋子落子规则,检测并判断胜负条件,同时提供用户友好的交互界面...
在Android平台上进行游戏开发是一项富有挑战性和趣味性的任务,尤其当你选择开发一款迷宫小球游戏时,这将涉及到许多核心技术和设计原则。本案例"Android开发精典案例 游戏 迷宫小球"旨在深入探讨如何在Android环境...
在本项目中,“Android课业设计推箱子小游戏完整版项目”是一个基于Android Studio开发的移动端游戏,它将经典的“推箱子”玩法与个人创新的神奇宝贝主题相结合,为玩家提供了独特的游戏体验。以下是对这个项目的...
1. **项目结构**:Android Studio项目通常包含`app`模块,其中`src`目录下有`main`和`java`、`res`等子目录。`java`用于编写Java代码,`res`存储资源文件如布局、图片、音频等。 2. **布局设计**:使用XML文件在`...
开发者需要编写逻辑代码来处理这些情况,并确保游戏的稳定性和可玩性。 5. **游戏状态管理** 游戏应具有保存和加载进度的功能。这通常涉及使用SharedPreferences或SQLite数据库来存储当前的游戏状态,以便玩家在...
在《Android版连连看》中,游戏的核心玩法是消除相同图案的方块。玩家需在限定时间内找到并点击两个能通过直线连接(且直线不超过两个转折)的相同图案,当所有可匹配的图案都被消除后,即完成关卡。游戏设计了多种...
【超级玛丽Android源码】项目是一个将经典游戏“超级玛丽”移植到Android平台的实例,旨在帮助开发者了解如何在移动设备上构建2D游戏。这个项目涵盖了Android游戏开发中的多个重要知识点,包括游戏循环、碰撞检测、...
源码可能包含提示信息、声音反馈等元素,提升游戏的可玩性。 通过研究这款基于Android 2.1的翻卡片游戏源码,开发者不仅可以学习到基本的Android编程技能,还能了解到游戏开发的实践技巧,包括用户交互设计、资源...