Angry Birds安装后,运行后提示:Unfortunately, Angry Birds has stopped. 虽然没做过android开发,但我还是先尝试做一下android下的调试,为以后打打基础。

1、查log信息:

Android下查看log使用logcat工具(参考http://fins.iteye.com/blog/141021)。

logcat输出:

E/AndroidRuntime( 2443): FATAL EXCEPTION: main
E/AndroidRuntime( 2443): java.lang.UnsatisfiedLinkError: Couldn't load angrybirds: findLibrary returned null
E/AndroidRuntime( 2443):        at java.lang.Runtime.loadLibrary(Runtime.java:365)
E/AndroidRuntime( 2443):        at java.lang.System.loadLibrary(System.java:535)
E/AndroidRuntime( 2443):        at com.rovio.ka3d.App.onCreate(App.java:29)
E/AndroidRuntime( 2443):        at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime( 2443):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime( 2443):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
E/AndroidRuntime( 2443):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
E/AndroidRuntime( 2443):        at android.app.ActivityThread.access$600(ActivityThread.java:122)
E/AndroidRuntime( 2443):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
E/AndroidRuntime( 2443):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 2443):        at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 2443):        at android.app.ActivityThread.main(ActivityThread.java:4340)
E/AndroidRuntime( 2443):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 2443):        at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 2443):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime( 2443):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime( 2443):        at dalvik.system.NativeStart.main(Native Method)

可以看出系统在加载一个库文件时出现错误:Couldn't load angrybirds,这里我想应该是俩个意思:1、这个库不存在;2、库的格式不对。最初我是按第一个意思理解,而且没看出库的名字是什么,现在看来应该是libangrybirds.so。既然不知道程序加载哪个库文件,那就想办法跟踪系统调用。

2、跟踪系统调用

linux下跟踪系统调用可以使用strace,android下也有相应的工具,我的sdk已经自带了strace,省去的编译的麻烦。但strace要在命令行下执行,因此需要找到手动启动应用的方法。

3、手动启动程序

搜索了一下google,android手动启动应用要使用am工具,参考http://tech.it168.com/a2009/0529/579/000000579028.shtml。

am的简单用法是:am start PackageName/ActivityName。PackageName和ActivityName在AndroidManifest.xml中定义,因此解压apk包,找到angry birds的AndroidManifest.xml,但这个xml居然是个二进制文件,应该是加扰过的,需要反编译。

4、反编译

参考http://lytsing.org/wiki/android/decompile.html,我下载了里面的AXMLPrinter2.jar,在pc上执行java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest2.xml,得到xml的源码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"android:versionCode="2110"android:versionName="2.1.1"android:installLocation="0"package="com.rovio.angrybirds"><applicationandroid:label="@7F030001"android:icon="@7F020000"android:debuggable="false"><activityandroid:theme="@android:01030007"android:name="com.rovio.ka3d.App"android:launchMode="2"android:screenOrientation="0"android:configChanges="0x000004A0"><intent-filter><actionandroid:name="android.intent.action.MAIN"></action><categoryandroid:name="android.intent.category.LAUNCHER"></category></intent-filter></activity><activityandroid:theme="@android:01030007"android:name="com.burstly.lib.component.networkcomponent.burstly.VideoPlayerActivity"android:configChanges="0x000000B0"></activity><activityandroid:theme="@android:01030007"android:name="com.burstly.lib.component.networkcomponent.burstly.BurstlyFullscreenActivity"android:configChanges="0x000000B0"></activity><activityandroid:name="com.google.ads.AdActivity"android:configChanges="0x00000FB0"></activity><providerandroid:name="com.greystripe.android.sdk.AdContentProvider"android:exported="false"android:multiprocess="true"android:authorities="com.rovio.ka3d.AdContentProvider"></provider><activityandroid:name="com.greystripe.android.sdk.AdView"android:configChanges="0x000000B0"><intent-filter><categoryandroid:name="android.intent.category.LAUNCHER"></category></intent-filter></activity><activityandroid:name="com.millennialmedia.android.MMAdViewOverlayActivity"></activity><activityandroid:theme="@android:01030007"android:name="com.millennialmedia.android.VideoPlayer"android:configChanges="0x000000B0"></activity><supports-screensandroid:anyDensity="true"android:smallScreens="true"android:normalScreens="true"android:largeScreens="true"></supports-screens><activityandroid:theme="@android:01030007"android:name="com.burstly.lib.component.networkcomponent.jumptap.JumptapActivity"android:configChanges="0x000000B0"></activity></application><uses-permissionandroid:name="android.permission.INTERNET"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-sdkandroid:minSdkVersion="4"android:targetSdkVersion="13"></uses-sdk>
</manifest>

可以看出其PackageName和ActivityName分别为:com.rovio.angrybirds和com.rovio.ka3d.App。

5、继续strace追踪

使用am执行:am start com.rovio.angrybirds/com.rovio.ka3d.App,可以看到触摸屏上出现同样的提示:Unfortunately, Angry Birds has stopped. 于是加上strace执行:strace am start com.rovio.angrybirds/com.rovio.ka3d.App,却提示:

execve("/system/bin/am", ["am", "start com.rovio.angrybirds/com."...], [/* 20 vars */]) = -1 ENOEXEC (Exec format error)
write(2, "strace: exec", 12strace: exec)            = 12
write(2, ": ", 2: )                       = 2
write(2, "Exec format error", 17Exec format error)       = 17
write(2, "\n", 1
)                       = 1
exit_group(1)                           = ?

strace不能启动am。继续查了一下am,发现am其实是个脚本:

# Script to start "am" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"

那么,直接修改exec为exec strace -f(-f为追踪fork的子进程)。于是,strace成功输出系统调用过程。
    6、strace分析

一般来说,如果是动态库不存在,系统会返回ENOENT错误,但查找了strace的所有输出,没发现哪个so存在ENOENT的错误返回,甚至没找到跟angry birds有关的so调用,我想可能是strace在追踪android应用时,对虚拟机的调用捕获的不完整。但其中有一个打开logging.properties的ENOENT的错误,很值得注意。

7、logging.properties

这个文件是jdk的日志配置文件(参考http://qingzuochen.iteye.com/blog/616151)。按照文章中的配置,程序执行后确实在/目录下生成的SSLog0.log,可惜内容是空的,没写入任何log信息。

8、最终答案:ARM与MIPS

也许经验丰富的人早就看出问题的所在了,我的板子是个MIPS的方案,而android现在只提供了arm的编译器,软件商也只提供了基于arm的jni本地版本,所以网上下载的大多数游戏在我的MIPS CPU上不能运行是再正常不过的事情了,而我却绕了这么大一个圈子,最后看到apk下的so是放在arm文件夹下,才想起这个事情,这也算是初入android平台的教训吧。好消息在这儿:http://mobile.csdn.net/a/20120417/2804671.html

关于Angry Birds不能在我的板子上执行的探索相关推荐

  1. 用Android模拟器体验angry birds

    这几天IT新闻里面没天都充斥着愤怒的小鸟(Angry birds)的新闻,微博上讨论的也不少,但是苦于囊肿羞涩,不能用真机见识一下这款今年的年度游戏,于是就想到能不能用模拟器体验一下这款游戏!愤怒的小 ...

  2. Angry Birds Rio 攻略 1-1

    Angry Birds Rio 攻略 1-1 1-1 基本攻略データ パイナップル:× 手持ちの鳥 :赤4 appllioが三ツ星獲得した得点:61700 三ツ星攻略メモ 1-1は練習ステージのような ...

  3. 愤怒的小鸟4只编外鸟_丽萨荐书 愤怒的小鸟 Angry Birds ICR #1

     <愤怒的小鸟> Angry Birds ICR #1 在我们往期推荐的绘本中,很少出现Level 2级别的,My First和Level 1的作品居多,如饼干狗.皮特猫.啪嗒猫系列等.这 ...

  4. 愤怒的小鸟重制版 Angry Birds Reloaded for Mac(经典的休闲游戏)

    小伙伴们,还记那年横空出世的愤怒的小鸟吗?滑动手指,蓄力拉满,直冲小绿猪猪? 愤怒的小鸟重制版 Angry Birds Reloaded又回来啦,并且在全新的版本上面加入了红色,查克,炸弹,银和其他帮 ...

  5. Chrome游戏:超级玛丽(Super Mario Bros. Crossover)、愤怒的小鸟(Angry Birds

    查看原文:http://www.hellonet8.com/431.html 好久没有去关注chrome的扩展有游戏了,今天闲来没事,就去chrome的应用商店去瞧了下,发现几个不错的chrome游戏 ...

  6. Angry Birds专用平板Wopad V7+,深圳造

    如果你认为愤怒的小鸟(Angry Birds)热度已经消退,那么你就错了.Rovio正在做许多的品牌推广计划,希望让他们品牌成为像任天堂的玛丽奥或米老鼠一样,拥有众多以愤怒的小鸟为主题的游戏.公仔等产 ...

  7. Angry Birds和广告系统泄露个人信息——FireEye对Angry Birds的分析

    我是壮丁 · 2014/04/14 12:50 from:www.fireeye.com/blog/techni- 0x00 背景 很多流行的app,包括愤怒的小鸟在内,收集并且分享玩家的个人信息的广 ...

  8. Angry Birds 中的 Chrome 彩蛋们

    玩腻了移动设备中Angry Birds的关卡?现在你可以试试Chrome中的Angry Birds,会给你带来不一样的游戏感觉. Chrome版的Angry Birds不但设计了新的 Chrome 专 ...

  9. Angry Birds for Chrome 升级,带来圣诞新关卡和 Mighty Eagle

    Chrome版的Angry Birds升级了!这个新的1.2.0版本里增加了专为圣诞节设计的关卡,以及iOS平台上早就有了的极具破坏力的Mighty Eagle. 具体包括: 42个关卡可用Might ...

最新文章

  1. 自定义控件只允许输入Decimal和int类型字符串
  2. 林华达视角-概率图模型与计算机视觉
  3. h5 修改title 微信_微信公众号客服消息不限次数推送如何设置?
  4. 35岁北大博士拟升市长
  5. lucene简单实例
  6. iOS 开发中,单款应用程序的最大可用内存是多少?
  7. vb.net word 自定义工具栏_word重点标记新玩法:应用绘图工具手写笔进行划线涂抹...
  8. windows 下安装Python
  9. KDD2020 | 半监督迁移协同过滤推荐
  10. contenttype文件ajax_jquery ajax contentType设置
  11. 【转】TreeList 选中节点时图标状态和背景色
  12. 记录下Gradle化Android Gallery3D应用的过程
  13. Kaggle —— 泰坦尼克号
  14. 网工必备交换机原理与配置
  15. SpringBoot Banner 图片定制修改
  16. GRUB的menu.lst的写法
  17. 几个期货基本面因子的研究
  18. 不用PS,也能实现抠图的工具
  19. testflight无法联网怎么办_TestFlight提示“无法接入App Store Connect”怎么办?
  20. 从第三方企业邮箱迁移至Office 365(21V) Exchange Online

热门文章

  1. GoogleMap——谷歌地图Api的使用
  2. 做前端有钱途还是后端有钱途?
  3. 端口映射实现手机做服务器
  4. scala从服务器读取文件,学习Scala脚本:从文件里读取行记录
  5. 痛惜:4月17日浙江、18日北京火灾分析
  6. CA证书和SSL证书的区别
  7. 如何设置工业设备的振动监测阈值
  8. NNDL实验五 前馈神经网络(2)自动梯度计算 优化问题
  9. 【金九银十】终一搏,BAT、TMD名企精选面试题93道(附解析)
  10. Husky数据分析——招聘信息背后的潜规则揭秘