`
473687880
  • 浏览: 535862 次
文章分类
社区版块
存档分类
最新评论

Android开发备忘录

 
阅读更多

1.Android中颜色的表示

颜色顺序不再是RGBA,而是ARGB

例如,在我们一般的opengl中,我们设置颜色时,是指定一个4元组,分别代表三个颜色分量R,G,B和一个Alpha值A

而在android中则是A,R, G, B

当然,在Android中,如果一个颜色值只有3个字节,那么就表明它不带Alpha值,只有RGB,Alpha值默认为FF.

2.SourceInsight的配置的几个问题

(1)让Si的文档标题显示完整的文件名的方法

英文版 去掉勾选 Options->Preferences->Display下的 “Trim long path names with ellipses”选项即可

中文版 去掉勾选 O选项参数选择->显示->用椭圆修剪长文件名

(2)修改字体

英文版 Options->Document Options -> Screen Font

(3)TAB键修改

Options->Document Options 右下角的Editing Options,tab width填4,然后勾上expand tabs选择。

3.Eclipse 启动时,报错,workspace in use or cannot be created

这个问题,一般的解决方法是在workspace的目录下有个.metadata目录,这个目录下面有个.lock文件,是由于上次未正常关闭释放workspace的锁而造成的。解决方法就是把这个.lock文件删除掉就行了。
当然还有另外一种原因:workspace的路经不存在。给定一个 workspace的绝对路径,只有当workspace的文件夹名不存在时,Eclipse会自动创建这个workspace文件夹名,但是如果workspace的上一级路径不存在,就会存在这个问题。
原来我曾将workspace所在的文件夹改过名,因为把android拼错了,后来打开就一直有这个问题,也没想到过仔细检查路径。

4.修改Android源码时,使用git管理工具恢复

Android源码一般使用git版本管理工具管理,在研究Android源码时,有时要加上一些打印语句或是作些修改,但是也可能作了些些错误的修改或是记了某些修改导致系统启动不成功或是恢复原状,这时候可以使用 git的命令对代码进行恢复
简单介绍两个命令:
git diff <filename> 比较文件或是文件夹里文件的修改
git checkout file-name 撤销某个文件的修改,将其恢复原状

5.设置Android模拟器使用硬件加速

(1)一般情况,查看http://developer.android.com/tools/devices/emulator.html#accelerationUsing Hardware Acceleration这一节就了解怎么设置了。
(2)如果是使用自己编译的内核源码镜像,而且从命令行启动,那么使用: emulator -gpu on 命令就可以了。

6.在Android源码中打印日志信息

(1)在java源码中:
a)导入日志库:import android.util.Log;

b)在要输出日志的地方直接使用 Log.d("JAVA_DEBUGGING", "Logging from Java!\n");

(2)在ndk源码中:

a)包含日志头文件:#include <android/log.h>

b)由于原始的写日志函数太复杂不太好用,所以自定义相关的宏:

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "JNI_DEBUGGING", __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,   "JNI_DEBUGGING", __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,    "JNI_DEBUGGING", __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,    "JNI_DEBUGGING", __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,   "JNI_DEBUGGING", __VA_ARGS__)
c)在要打印日志的源码所在的Android.mk中添加:LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

d)在要输出日志的代码处使用:LOGD("Logging from C++!\n"); //其它四种日志方法类似

(3)查看日志的方法

a)如果使用Eclipse调试则使用DDMS显示所有Logcat日志,要查看某种特定Log_Tag的日志,添加一个Filter即可。

b)在命令行启动模拟器时,使用 adb logcat 可得到模拟器的日志信息,要查看特定TAG的日志,则配合grep命令:

adb logcat | grep LOG_TAG

7.在Android的NDK源码中打印堆栈信息

由于Android源码的c++层代码过于复杂,有些想知道一个函数被哪些函数调用或是这个函数在UI中的调用路径,那么可以使用打印系统堆栈的方法

例如,在frameworks/native/services/surfaceflinger/LayerBase.cpp中,有一个方法 setAlpha,需要查看这个成员函数的调用路径:

a)在源码文件中添加打印堆栈用到的头文件:#include <utils/CallStack.h>

b)修改setAlpha方法:

bool LayerBase::setAlpha(uint8_t alpha) {
    ...
    #define _ARM_
    #ifdef _ARM_
    LOGD("CallStack...");	//by amw
    android::CallStack stack;
    stack.update(1, 100);
    stack.dump("");
    #endif
    ...
}

8.Android模拟器启动失败

Android模拟器启动失败的现象是一直停留在启动画面,进入不了主界面。这种情况是我在研究Android源码时出现的。

初步分析原因是在源码中加打印语句时出现的问题,

当使用Log.d(TAG, "字符串" + 一个数) 这种情况时就会出现。

使用System.out.println("TAG\t字符串" + 一个数) 也会出现这种问题,暂时没有发现解决的方法。

附:可以解决,原因应该是消息字符串不能是字符串和整数或浮点数直接相加,而要先把整数或浮点数转化成字符串,转化成字符器的方法:

Log.d(TAG, "字符串" + Float.toString(浮点数));

而且使用String.valueOf()这种方法转化也是不行的。

9.Android日志查看

Android的Log类产生的日志可以通过以下命令查看:

adb logcat -b radio

而在Android中还有许多由sLog类产生的日志,要查看它们,需用以下命令:

adb logcat -b system

-b 表示日誌存放的緩衝區

主要有三種:main radio 以及system

10.使用修改后的android源码编译Android应用程序

Android应用程序还是用Eclipse写,用它进行布局方面和设计以及代码编写和语法检查,当然,因为的代码中可能使用了新的你自己添加的Android 方法或是属性,在Eclipse中会出现错误,这个只要确认你没有用错,就不用管。

下一步将你的应用程序拷贝到android源码中的packages/apps/ 目录下,然后packages/apps/下其它工程里拷贝一个Android.mk到你的工程中去,作一些修改,推荐拷贝DeskClock工程下的Android.mk,它本身比较简单,而且要修改的地方少,只要修改LOCAL_PACKAGE_NAME和LOCAL_OVERRIDES_PACKAGES两个环境值就行了,根据你自己的情况作修改。

接下来在你的工程中运行mm模块编译命令。

如果没有什么错误的话,会就生成相应的apk文件。你可以使用adb install命令进行安装。

当然,如果你在模拟器上运行你的程序,那么你接下来可能遇到以下问题。

11.adb install 安装失败

INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES:签名冲突造成的。使用adb install -r 安装也是不行的,最好要把原来的程序卸载掉,然后重新adb install安装。
INSTALL_FAILED_DEXOPT:这个是由于System/APPS下的apk都是经过优化的,dex不会被打包到apk中去,而是优化成odex,仔细观察mm命令的结果也可以看出
Install: out/target/product/generic/system/app/MyDemos.odex
Install: out/target/product/generic/system/app/MyDemos.apk
确实是有apk和odex两个文件。
解决方法是找到未优化过的apk文件,具体位置可能要搜索。例如我的搜索命令为find -name "*.apk.unaligned" | grep MyDemos,当前目标是android源码的顶层目录,MyDemos是我的工程名.找到未优化的apk,然后执行
adb install ./out/target/product/generic/obj/APPS/MyDemos_intermediates/package.apk.unaligned
安装这个未优化的 apk。
INSTALL_FAILED_UID_CHANGED你以前安装过这个应用程序,到/data/data下删除完这个程序的包名对应的文件夹, 新安装的会另外生成uid,检查原来/data/data下的还是旧的就装不上。
参考:

12.Android源码编译方法

第一种方法
自然是标准也是在全面和费时的方法:在源码的顶层目录使用 make命令进行全部编译,也可以根据自己的机器配置,决定开几个进程来加快编译只要带上参数 -jn,参数n表示同时开启的进程数,一般推荐 make -j4
第二种方法
增量编译
先进入到所在库的模块目录内,在有Android.mk的目录内执行mm命令
或是直接使用mmm <模块路径> 来编译此模块
然后使用mkyaffs2image命令直接更新system.img,至于这个命令怎么用,你执行一个make 或是make systemimage后,在输出结果的最末尾,就有这种命令的执行,你可以把这条执行命令写到一个mk.sh中去,然后每次mm命令完后直接运行这个mk.sh就行了。
这个编译方法我觉得如果只是研究android源码启动模拟器是没有问题的,但是,上面一些其它的应用能不能运行就不好说了。
还有一种方法是mm或是mmm命令后,使用make systemimage,这个比较好一点,但是比较费时。它会把android自带的工程也全部编译一遍,如果你用不到这些工作就比较费时了。

13.更改Android源码中的emulator的宽和高

Android源码中自带的emulator比较小,而且带右边的键盘,一般也很少用到,有时候想测试大屏幕的效果,又没有像avd那样直观的设置
可以通过启动emulator时加上参数
emulator -skin xxx
这条命令会为这个模拟器新指定一个皮肤,不同的皮肤有不同的屏幕大小,至于这个xxx(皮肤名),可以在./development/tools/emulator/skins/这个目录下查看,例如我想使用一个平板电脑的屏幕,而且没有键盘,那么可以使用WXGA800皮肤,命令可以是这样的:
emulator -skinWXGA800

14.使用Eclipse进行Android源码调试

http://source.android.com/source/using-eclipse.html 这个是android官方网站的操作手册,但是有些步骤有问题。
http://wenku.it168.com/d_000085148.shtml 这个是一个中文的带图和文字的操作说明

15.查看Android版本信息

编译的时候从makefile的信息中确实可以看到,另外还可以从git(.repo/manifest.xml)中查询,或者到build/core/version_plaform.mk中去查询plaform_version的定义值。

16.创建和启动Android模拟器

1.查看当前支持版本(在列出的版本中我们需要记住id值,这个值在第2步中使用):

magicyu@magicyu-desktop:~$ android list target

你可以看到几个Available Android targets,比如:Name: Android 1.6,他们有各自的id号。

2.创建AVD:

magicyu@magicyu-desktop:~$ android create avd -n magicyu -t 2

-n后面接需要创建avd的名字,-t后面接需要创建虚拟器的类型,2即为步骤(1)中得到的类型id号。

3.查看是否创建成功(如果成功会显示刚才我们创建的avd信息):

magicyu@magicyu-desktop:~$ android list avd

4. 启动模拟器:

magicyu@magicyu-desktop:~$ emulator @magicyu或者

emulator -avd magicyu

其中@和-avd后接的是你创建过的avd名字

5. 选择启动的皮肤

magicyu@magicyu-desktop:~$ emulator -avd magicyu -skin QVGA

skin后面接所要启动皮肤的类型,所有的类型可以在<SDK>/ platforms/android-1.*/skins目录下找到,*为所指的版本。如在1.6版本的SDK下有HVGA,QVGA,WVGA800,WVGA854几种。按Ctrl+F11,可以直接改变模拟器的横纵摆放。

17.将编译好的本地android库上传到android系统

一般因为android某些目录因为进程占用的关系,不能直接通过adb push将某个库推送到android系统的某个目录。

解决方法是通过重新挂载此目录,指定它的读写属性,这样就能通过adb push上传文件了。

1. adb shell登录进入android系统

2. 输入mount命令,查看android的系统分区,找到要上传的目录所在分区,并查看它的读写属性, 以/system目录为例

#mount | grep system

/dev/block/mmcblk0p1 /system ext4 ro,relatime,user_xattr,acl,barrier=1,data=ordered 0 0

3. 从上面可见, /system目录是只读的,三种方法:

a. 直接运行 adb remount

b. 如果以上不行的话,adb shell登录系统,文件系统remount为读写权限: mount -o rw,remount /system。出于安全考虑,记得完事后remount回只读: mount -o ro,remount /system

c.和方法2类似,mount -o rw,remount -t ext4 /dev/block/mmcblk0p1 /system

18. 命令行启动android应用程序

am start -n com.android.settings/com.android.settings.Settings &
am start -n com.android.settings/com.android.settings.SoundAndDisplaySettings &
am start -n com.android.music/com.android.music.MediaPlaybackActivity -d file:///a.ogg &

其实就是去文件packages/apps/Settings/AndroidManifest.xml中观看package="com.android.settings",然后所有activity的名字都可以使用上面的am start -n启动了
am start -n package/package.Activityname -d Uri &
手机可以adb shell && am --help 查看更加详细的语法


拨电话号码
am start -a android.intent.action.DIAL -d tel:0800000123 &


直接打该号码(需要将packages/apps/Phone/AndroidManifest.xml中含有"android.intent.action.CALL"的所在activity即"OutgoingCallBroadcaster"包含的ndroid:permission="android.permission.CALL_PHONE"去掉才行)
am start -a android.intent.action.CALL -d tel:0800000123 &


上网
am start -a android.intent.action.VIEW -d http://www.baidu.com &


发邮件
am start -a android.intent.action.SENDTO -d mailto:gliethttp@123.com &


显示地图
am start -a android.intent.action.SENDTO -d "geo:38.899533,-77.036476" &

19. Android Emulator支持OpenGL ES 2.0

从4.03及以后的版本的Emulator都支持OpenGL ES 2.0.它们的原理是将OpenGL ES 2.0的调用转化成桌面版的OpenGL的调用,这样就可以利用本地图像层进行加速。

设置方法:

1. 打开Android Virtual Device Manager,编辑你的模拟器,找到硬件设置区,增加“GPU Emulation”,设置成true. 或是 找到"Use Host GPU",勾选。

2.在代码中,这里有一个bug: final boolean supportsES2 = configurationInfo.reqGIEsVersion >= 0x20000 不起作用,它总是返回false. 你需要增加"|| Build.FINGERPRING.startWith("generic")" 或是简单的注释掉检查,总是假设模拟器支持OpenGL ES 2.0

http://www.learnopengles.com/android-emulator-now-supports-native-opengl-es2-0/

20. Eclipse打开DDMS时卡死且系统占用100%

包冲突的原因。与libgail库冲突。解决方法是 sudo apt-get purge libgail*;如果有libgail-common,也要删除。注意,用此条语句会同时删除gimp; 如果不想这样的话,直接找到libgail.so 然后改个名字 比如 libgail.so.removed
分享到:
评论

相关推荐

    Android程序研发源码Android 备忘录源码.zip

    在Android程序开发中,备忘录应用是一种常见的项目,它涉及到...通过分析和学习这个备忘录应用的源码,开发者可以提升对Android开发的整体理解,掌握实际项目开发中的最佳实践,为今后的Android应用开发打下坚实基础。

    Android 备忘录源码.rar

    《Android 备忘录应用开发详解》 在移动设备上,备忘录应用程序是一种非常实用的工具,它可以帮助用户记录日常琐事、待办事项或重要想法。Android平台提供了丰富的API和工具,使得开发者能够轻松构建这样的应用。...

    Android手机备忘录的设计与实现 开题报告.doc编程资料

    Android手机备忘录的设计与实现 开题报告.doc

    Android课程设计--便捷备忘录

    总的来说,"Android课程设计--便捷备忘录"是一个实践性强、涵盖Android基础功能的项目,对于学习Android开发的新手来说,这是一个很好的起点。通过这个项目,你可以深入理解Android组件的使用、SQLite数据库的操作、...

    android studio 简单备忘录

    在Android Studio中开发一个简单的备忘录应用是一个常见的任务,涉及到Android应用程序的基础架构、用户界面设计、数据存储以及事件处理等多个方面。以下是一些相关的知识点: 1. **Android Studio介绍**:Android ...

    Android备忘录模式简单Demo

    Android备忘录模式简单Demo,实现通过memoto备忘录实体,实现游戏存档和读档的功能简单模拟,便于理解备忘录模式.同步博文:http://blog.csdn.net/qq_28690547/article/details/50708415

    用android studio写的一个备忘录

    下面将详细介绍Android Studio、Android开发以及备忘录应用的相关知识点。 **1. Android Studio** Android Studio是Google为Android开发者提供的强大工具,它基于IntelliJ IDEA,提供了一整套用于创建、调试和发布...

    Android开发的多媒体备忘录(含代码)

    这款获奖的多媒体备忘录应用程序展示了Android开发的强大功能和创新性。 首先,让我们深入探讨Android多媒体备忘录的核心功能: 1. **文本记录**:这是最基本的功能,用户可以通过输入文字来创建备忘录。在Android...

    基于android的备忘录程序设计

    总之,"基于Android的备忘录程序设计"项目涵盖了Android开发的多个核心领域,包括UI设计、数据存储、用户交互和事件处理。对于想要踏入Android开发领域的初学者来说,这是一个全面且实用的学习资源。通过这个项目,...

    android 作业 备忘录

    在Android平台上,开发一款备忘录应用是一项...以上是"android作业 备忘录"项目可能涉及的关键知识点,涵盖Android开发的多个方面。通过这样的实践项目,开发者可以深入理解Android应用的工作原理,并提升其编程技能。

    android备忘录源码

    在Android平台上,开发一款备忘录应用是一种常见的实践,它能帮助用户记录日常生活中的琐事、待办事项或重要信息。本源码提供了一个完整的Android备忘录应用的实现,对于学习Android应用开发或者想要深入理解备忘录...

    手机备忘录程序

    综上所述,构建一个手机备忘录程序涉及到了Android应用开发的多个方面,包括UI设计、数据存储、定时服务和系统通知。通过学习和理解这些技术,开发者可以创建出高效、用户友好的备忘工具,帮助用户管理日常事务。

    android 智能备忘录

    1. **Android SDK**:智能备忘录的开发基于Android Software Development Kit (SDK),它是Android应用开发的基础。开发者需要安装并配置Android SDK,以便利用其提供的工具、库和API来编写代码。 2. **Activity和...

    Android开发智能备忘录系统.doc

    "Android开发智能备忘录系统" Android智能备忘录系统是基于Android操作系统的手机应用程序,旨在提供一个便捷、实用的备忘录工具,帮助用户更好地记录和管理自己的工作和生活安排。该系统的设计目标是为了满足用户...

    一个简单的Android备忘录.zip

    在本项目"一个简单的Android备忘录.zip"中,我们主要关注的是如何使用Android Studio开发一个手机端的小型备忘录应用。这个课程设计旨在帮助初学者了解Android应用的基础架构和核心组件,如Activity、Intent、SQLite...

    Android备忘录系统的开发

    在Android平台上,开发一个备忘录系统是一项常见的实践任务,对于初学者来说,这是一个极好的学习项目,因为它涵盖了Android开发的基础知识以及一些高级特性。在这个实例中,我们将深入探讨如何构建这样一个系统,从...

    android备忘录实现

    1. **Android开发环境**:首先,`.classpath`和`.project`是Eclipse或Android Studio项目的配置文件,它们包含了项目构建路径和IDE相关的设置。`project.properties`文件则包含了项目的构建属性,如目标SDK版本等。 ...

    基于Android的备忘录源码

    在Android平台上开发备忘录应用是一项常见的任务,它能够帮助用户记录生活、工作中的重要事项。本篇将详细解析一个基于Android的备忘录应用源码,以便理解其核心功能和实现机制。 1. **项目结构分析** 备忘录应用...

    Android源码——备忘录源码.zip

    这份“Android源码——备忘录源码.zip”压缩包很可能包含了一个完整的备忘录应用的源代码,对于学习Android开发,特别是对UI设计、数据存储和事件处理感兴趣的开发者来说,是一个宝贵的资源。下面我们将详细探讨这个...

Global site tag (gtag.js) - Google Analytics