Archive for the 'Android' Category

从 Android 手机上获取 apk 文件

2012-1-19 06:00 | by 2ndboy

  由于某些原因,需要把某 app 的 apk 拿到,装在 PC 上的模拟器里,然后对其网络通讯进行嗅探。开始的想法是在模拟器里装 Android market,然后就可以把 app 下载到模拟器里了,但是跟着网上的 step by step 指南做了 n 遍都未能成功。也许是版本问题?又或许 Google 对这招进行了封堵?此招不成后在用 Google search 过程中找到了另外一种方法,现记录如下:

  这个方法需要你有个真机,这里以我手上的 Samsung Galaxy S II(SGH-I777)为例进行说明。首先在真机上打开 market,下载 AppInstaller 这个 app,需要注意的是 market 里有另外一款名字相同,图标也差不多的 app,所以你需要下载由 FunTrigger 出品的 AppInstaller。

  然后需要确认你手机的 USB debugging 模式处于关闭状态。具体设置在:Setting、Application、Development。

  打开 AppInstaller,切换到 Manage App 页,找到你要扒的 app,长按之,在弹出的菜单里选择 Export 就可以了。

  最后用 mini USB 线把 Samsung Galaxy S II 连上 PC 机,我的电脑里会出现一个 SGH-I777 的图标,双击之,在 Phone 下面就会找到刚才导出的那个 app 的 apk 文件了。

  拿到 apk 以后,你可以打开模拟器,在命令行下用 adb install foo.apk 把这个 app 安装到模拟器里面。

Support Package 和 ActionBarSherlock 使用心得

2011-12-16 14:09 | by 2ndboy

  Action BarViewPager 出现以后,使得 Android 程序 cool 了很多。简单的说,ViewPager 使得实现手指横向划过屏幕来切换场景变得简单,这种切换方式在触摸屏上非常符合直觉,远胜 button 跟 tab 的体验。Action Bar 则提供了更为直接快捷的常用功能访问途径,在没有实体 menu 按键或者屏幕尺寸比较大的时候可以有更好的使用体验。

  在没有 ViewPager 之前,各路神仙使用了各种办法来尝试实现平滑的视图切换,目前 ViewPager 已经进入 Support Package,得到了 Google 的官方支持。当然,Support Package 里的好东西还有大把,比如为使用 Honeycomb(Android 3.0.x;API Level 11)之前的开发者准备的 Fragment 等等。不过 Support Package 里目前并不包含 Action Bar,于是网上也出现了一些开源的 Action Bar 实现,比如 android-actionbarGreenDroid 以及 今天要写的 ActionBarSherlock

  ActionBarSherlock 其实内置了一份 Support Package,所以并不需要在你自己的程序中再次引用 Support Package,如果已经做了引用,则需要去掉。ActionBarSherlock 需要使用 Android 3.2 SDK(API Level 13)进行编译,你的程序也需要至少 API Level 13 进行编译,但是编译出来的程序可以跑在 2.3 的系统上,并在低版本的系统上实现 Action Bar 和 ViewPager。

  ActionBarSherlock 目前的最新版本是 v3.4.2,假设我们下载后把它释放在 E:\2ndboy\Android\ActionBarSherlock。ActionBarSherlock 不提供 jar 包下载,因为它内含的资源无法以 jar 的形式使用,所以要单独编译成 library 后被需要使用的程序引用。

  释放后打开 Eclipse,菜单 File,New,Project…。选中 Android 下的 Android Project,Next。接着在 New Android Project 对话框里选中 Create project from existing source。Project Name 填 ActionBarSherlock。Location 使用 E:\2ndboy\Android\ActionBarSherlock\library,Next。在 Select Build Target 对话框中选中 Android 3.2(API Level 13),Finish。

  如果遇到找不到 AndroidManifest.xml 的错误,可以尝试把 E:\2ndboy\Android\ActionBarSherlock 改名,出错原因是 Eclipse 其实是尝试在 ActionBarSherlock 下创建 project(因为我们指定的 Project Name 也叫 ActionBarSherlock),而不是 ActionBarSherlock\library。

  如果看到很多类似“Description Resource Path Location Type
The method add(CharSequence) of type Menu must override a superclass method Menu.java /ActionBarSherlock/src/android/support/v4/view line 5 Java Problem”的错误,可能需要在 Project Properties 里面,把 Java Compiler 的 Compiler compliance level 改成 1.6。

  以上就准备好了 ActionBarSherlock 库。接下来新建一个 Android Project,Select Build Target 时选 Android 3.2 或者更新的版本,Application Info 里面,Minimum SDK 指定一个你需要的最低版本,比如 4(Android 1.6)。

  建好新工程以后我们把 ActionBarSherlock 引入这个 project 里,让这个 app 可以支持 Support Package 和 Action Bar。Project Properties,Android。在 Library 里点 Add…,选中 ActionBarSherlock(这时 ActionBarsherlock 需要在 workspace 里面,并处于打开状态),Ok。

  加好以后如果发现 R class 没有生成(提示 R cannot be resolved to a variable),同时注意到新工程里引用的 Android SDK 低于 Android 3.2 的话,要进入 Project Properties,Android,在 Project Build Target 里选择 Android 3.2 或者更高版本,修改完成后最好 Close Project 后重新打开。

  以上就是编译 ActionBarSherlock 并集成到自己 project 的全过程,我这个 Android 菜鸟摸索了半天才搞定,不容易啊:D 下面简单介绍下 code 部分。

  使用 Action Bar 的 Activity 需要继承自 FragmentActivity,并且在 AndroidManifast.xml 里要指定 Activity 的 theme,示例如下:

  1. <activity
  2.      android:label="@string/app_name"
  3.      android:name=".2ndboy"
  4.      android:theme="@style/Theme.Sherlock" >

  获取 Action Bar 实例要用 getSupportActionBar(),而不是 getActionBar()。由于 ActionBarSherlock 已经自带了一份 Support Package,所以我们不需要再去引入就可以直接使用 ViewPager 和 Fragment 了。Action Bar 上可以加 tab,跟 ViewPager 的 swipe 实现联动,此外 Android-ViewPagerIndicator 也是一个可参考的不错的开源库,用来实现 ViewPager 的各种指示器效果。

Android 应用程序的生命周期

2007-11-18 11:41 | by 2ndboy

【译自:http://code.google.com/android/intro/lifecycle.html

  大多数情况下,每个 Android 程序都运行在自己的 Linux 进程空间里。当程序代码需要运行的时候进程就被创建出来,在程序已不在被使用或者系统需要回收其所占内存再分配给其它程序使用之前,这个进程一直存在。

  Android 的一个非常重要且不同寻常的特性就在于应用程序进程的的生命期由不得它自己直接控制。应用程序生命期由系统通过对如下几个条件的组合来裁决:系统知道应用程序的一部分正在运行,应用程序正在处理的事情对用户有多重要,系统中的可用内存还有多少。

  对应用程序开发者来说,理解各个组件(特别是Activity,Service 和 IntentReceiver)对应用程序生命期的不同影响是非常重要的。对组件不正确的使用可能会导致应用正在处理重要事务时被系统干掉。

  对进程生命期处理不当的一个常见例子是一个 IntentReceiver 在其 onReceiveIntent() 方法中接收到一个 intent 时启动了一个线程,接着就从 onReceiveIntent() 中返回了。一旦这个函数返回,系统就会认为这个 IntentReceiver 不再活动,因此它的宿主进程也就不会再被用到了(除非其内部的其它应用程序组件处于激活状态)。这时系统可能随时干掉这个进程,终止运行于其中的线程以回收内存。对这个问题的解决方案是在这个进程中启动一个 Service,这样系统就知道这个进程中仍然有些工作在做。

  为了在内存不足时裁决哪个进程应该被干掉,Android 会根据运行在进程中的组件和和组件的状态给进程们排出一个重要级别来。这些重要级别按重要性来排列依次是:

1. 前台进程就是在屏幕顶层,持有 Activity 正在跟用户进行交互的(其 onResume() 已经被调用过),或者是一个正在运行的 IntentReceiver(其 onReceiveIntent() 方法正在执行)进程。这样的进程在系统中非常少,只有当内存非常短缺,短缺到了连这些进程都无法继续运行的时候这类进程才会被干掉。通常此时移动设备已经到达了内存极限,这样做才能让用户界面不停止响应。

2. 可见进程就是持有 Activity,在屏幕上可见但又不是前台进程的那个进程(他的 onPause() 方法被调用过)。……

3. 服务进程……

4. 后台进程……

5. 空进程……

未完……