About
RSS

Bit Focus


Android SDK r20 深坑逃脱

Posted at 2012-08-25 10:30:24 | Updated at 2018-05-25 13:37:38

    最近有点不淡定, 一方面是看到 Google Nexus 7 还不错的样子, 另一方面听说已经有达人在 Nokia N9 上成功刷了 JB, 还能打电话 (作为外观控表示被 N9 的设计萌得死去活来), 所以无论如何近期是要入一台 Android 设备了 (嗯, N9 刷 Android 是肯定要进行的, 用 Meego 总感觉... 应用不多不靠谱? 或许是心理作用吧)
    言归正传, 就在这个时候, 想到, 嗯, 咱还是继续来一炮 Android 研发吧.
    所以搞了 JDK 搞了 Eclipse 搞了 ADT 准备开始.

    好了, 新建 Android Application, 映入眼帘的是三个小红叉, 看得我一阵浓重的違和感. 这些是什么东西? 跟以前见过的大不相同啊, 然后我的视线飘到小红叉左边的项目, 如下
Application Name:
Project Name:
Package Name:
    我说, 前面两个有什么区别? 以前我记得是填一个的啊, 没问题, 一向淡定的我决定把两个填一样, 来个 helloworld 先.
    好吧, 不得不说, 我完败了. 在我填写 Application Name 的时候, Project Name 自动变动跟 Application Name 一样. 这不叫智能补充好吧, 这简直是个智障设计啊.
    然后填了包名, 选了 SDK 版本, 下一步.

    我勒个... 一个蓝色的看起来很浪打印出来贴在墙上一定可以避邪的诡异笑脸突然就出现在对话框右边, 想吓死爹啊.
    原来是选择应用程序图标. 好吧, 随便选选, 我只是来对 world 说声 hello 的.
    下一步.

    这又是什么, 问我是否 Create Activity? 废话, 当然要啦, 不过这个怎么选择? BlankActivity 还是什么 MasterDetailFlow? 我点了一下下面的所谓的大湿细节流 (MasterDetailFlow), 结果上面出现一个醒目的红叉, 告诉我最低 SDK 必须是 11 或以上. 见你的鬼, 一开始新建应用时默认填的 8 没有改, 我也不想退回去改了, 好吧, 那就 BlankActivity.
    下一步.

    又是一个红叉. 我说能不能让我快点开始? 我记得原来 2.3 那个时代的 SDK 只需要填个项目名填个两级的包名就可以开始而且默认给个 HelloXxxx 的 Activity 来的, 现在怎么这么折腾.
    待本程定睛一看, 呃, 这个 Hierachical Parent 是什么意思? 不懂啊, 父类?
    要折腾死爷啊, 父类不是默认 Activity 么? 还能是什么? 我按了一下输入框右边画着三个点的小按钮, 出现了一个类搜索框, 我开始找...
    输入了 "Activity" 结果出现的提示只有 ActivityGroup, 我去, 这什么玩意儿, 我点了取消, 回到刚才的对话框手动输入了 "Activity" 字符串, 结果居然告诉我要 "Enter a valid activity name", 这还不够 valid 么.
    结果最后发现这一栏键入一个 "a" 就可以按 "Finish" 了.
    意味不明.

    然后我满心欢喜地新建了个 4.1 的虚拟机, 运行起 Hello World 先 :P
    虚拟机没反应.
    今天这是怎么了, 一定是开机姿势不对...
    到模拟器应用列表里面翻了一下, 也没找到. 顺带吐槽一下 4.1 里面那个什么 Widgets 也是很不习惯.
    好吧, 去模拟器的 Settings / Apps 里面看, 我的 HelloWorld 赫然在里面挺尸. 鼠标轻轻点一下, 到下一个界面, "Uninstall" 按钮赫然亮着啊混蛋, 看着这我都快跟着石川智晶姐姐唱起来了.
    好吧, 就当我没看见, 果断点 "Uninstall" 然后重新来一次, 图灵保佑诺依曼保佑乔帮主虽然按桌椅的是你死对头但也请你保佑一下这次一定启动.
    好吧还是没启动起来, 一定是我心意不够诚导致的.
    搞了好久还是不行, 于是尝试使用 adb shell, 如下
$ adb shell
# am start -a android.intent.action.MAIN -n com.hello/.MainActivity
    启动了, 热泪盈眶, 浑身湿透 @_@

    我意识到了什么, 打开 AndroidManifest.xml 一看.
    擦了, 好像确实有什么不对.
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="a" />
    </activity>
</application>
    虽然不明白这个 meta-data 标签啥意思, 但感觉怪怪的, 以前这里不是有个什么 indent 啊 MAIN 什么什么的来着么, 就像上面在 shell 里面启动应用一样.
    好吧, 最后解决方案是, 把下面一段内容替代 meta-data 标签
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
大功告成.

PS: 各位大侠请不吝赐教, 是不是之前某个对话框里要选择或者填写特定的内容才能使得生成的 MainActivity 作为主活动启动?

Post tags:   Android  Configuration Problem

Leave a comment:




Creative Commons License Your comment will be licensed under
CC-NC-ND 3.0


. Back to Bit Focus
NijiPress - Copyright (C) Neuron Teckid @ Bit Focus
About this site