楼主: 熊猫儿

[转载] 【Android开发网上的一些重要知识点[经验分享]。。】

[复制链接]
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
81#
 楼主| 发表于 2013-1-29 08:26 | 只看该作者
android开发: The import com.google cannot be resolved 的解决办法
分类: android开发之路(技术篇) 2012-12-03 16:25 79人阅读 评论(0) 收藏 举报
eclipseEclipsegoogleGoogleimportpropertiesProperties
这个主要是因为所选的SDK版本不正确。修改方法:


      最近刚刚接手了一个google Map相关应用的一个项目,导入别人代码后,出现了这个问题,现已解决,很高兴能与大家分享。。。

      在eclipse中依次选择:"Project" --> "Properties" --> "Android", 然后勾选 “Google APIs”选项即可, 如下图所示:


      


      PS:对于其他类似引入包无法解决的问题,勾选相应的包即可。。。

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
82#
 楼主| 发表于 2013-1-29 08:26 | 只看该作者
android WebView 控件之返回
分类: android开发之路(技术篇) 2012-11-23 14:03 72人阅读 评论(0) 收藏 举报
代码如下:

    public boolean dispatchKeyEvent(KeyEvent event) {

        // TODO Auto-generated method stub
        Log.d(TAG, "super.onKeyDown--> " + super.onKeyDown(event.getKeyCode(), event));
        if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
            webView.goBack();
            Log.d(TAG, "------------------------------------------");
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
83#
 楼主| 发表于 2013-1-29 08:28 | 只看该作者
Android架构分析之基于Android系统的C应用程序开发
分类: Android架构分析 2013-01-14 17:31 206人阅读 评论(0) 收藏 举报
作者:刘昊昱

博客:http://blog.csdn.net/liuhaoyutz

Android版本:2.3.7_r1

Linux内核版本:android-goldfish-2.6.29



本文介绍基于Android系统的C应用程序开发。我们知道,Android应用程序开发使用的是JAVA语言,但有时候我们也需要一些基于命令行的小程序,这些小程序一般使用C语言开发,程序的写法与PC平台的C程序没有区别,但需要把C程序注册到Android系统中,使其能在Android平台上运行。在这篇博客中,我们就写一个基于Android平台的C应用程序,该程序用来访问我们在上篇博客中创建的底层Linux驱动程序example。



创建development/example_test/example_test.c文件,其代码如下:

[cpp] view plaincopy
1#include <stdio.h>  
2#include <unistd.h>  
3#include <fcntl.h>  
4#include <string.h>  
5#include <sys/types.h>  
6#include <sys/stat.h>  
7  
8#define DEVICE_FILE "/dev/example"  
9  
10int main(int argc, char *argv[])  
11{  
12    int ret = 0, num = 12, val = 0, fd = 0;  
13  
14    fd = open(DEVICE_FILE, O_RDWR);  
15    if(fd < 0)  
16    {  
17        printf("open device error!\n");  
18        return -1;  
19    }  
20  
21    ret = write(fd, &num, sizeof(int));  
22    if(ret < 0)  
23    {  
24        printf("write device error!\n");  
25        return -1;  
26    }  
27  
28    printf("write val %d to device!\n", num);  
29  
30    ret = read(fd, &val, sizeof(int));  
31    if(ret < 0)  
32    {  
33        printf("read device error!\n");  
34        return -1;  
35    }  
36  
37    printf("read val = %d\n", val);  
38  
39    return 0;  
40}  
这个C程序打开/dev/example,向该设备寄存器写入一个数字12,再读取设备寄存器,所以读取得到的值应该也是12。

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
84#
 楼主| 发表于 2013-1-29 08:28 | 只看该作者
创建development/example_test/Android.mk文件,该文件用于注册本模块到Android系统中,其内容如下:

[cpp] view plaincopy
1LOCAL_PATH:= $(call my-dir)  
2include $(CLEAR_VARS)  
3  
4LOCAL_SRC_FILES := $(call all-subdir-c-files)  
5  
6LOCAL_MODULE := example_test  
7LOCAL_MODULE_TAGS := optional  
8include $(BUILD_EXECUTABLE)  
要看明白这个Android.mk,需要对Android编译系统有一个全面了解,这里,我不打算全面分析Android编译系统,只对这个Android.mk进行单独的分析。

第1行,定义变量LOCAL_PATH,其内容是通过$(call my-dir)语句调用自定义函数my-dir赋值的。这个my-dir函数定义在build/core/definitions.mk文件中的106-120行,其作用是返回这个Android.mk所在的目录。

第2行,包含变量CLEAR_VARS,这个变量定义在build/core/config.mk文件的第54行:

CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk

变量BUILD_SYSTEM定义在build/core/main.mk文件的第46行

BUILD_SYSTEM := $(TOPDIR)build/core

所以,变量CLEAR_VARS就是build/core/ clear_vars.mk。打开该文件,可以看到,这个文件的作用就是将除LOCAL_PATH以外的全部编译相关变量清零。

第4行,设置变量LOCAL_SRC_FILES,其内容是通过$(call all-subdir-c-files)语句调用自定义函数all-subdir-c-files赋值的。all-subdir-c-files函数定义在build/core/definitions.mk文件中的195-202行,其作用是返回当前目录及其子目录下的所有".c"文件文件名。

第6行,设置变量LOCAL_MODULE为example_test。即模块名。

第7行,设置变量LOCAL_MODULE_TAGS为optional。

第8行,包含变量BUILD_EXECUTABLE,该变量定义在build/core/config.mk文件的第60行:

BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk

即包含build/core/executable.mk,包含这个文件表明是要编译成一个可执行程序。

编写完C程序源码和Android.mk,我们就可以编译C应用程序了。有两种编译方法
方法一:在模块Android.mk所在目录下执行mm命令,系统就会对该模块进行编译

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
85#
 楼主| 发表于 2013-1-29 08:28 | 只看该作者
方法二:在Android主目录下执行mmm 模块路径名,这里即mmm development/example_test,系统也同样能开始对模块进行编译。

mmm和mm分别表示对指定目录和当前目录下的模块进行编译,这两个命令都定义在build/envsetup.sh文件中,我们在编译Android之前,首先要执行source build/envsetup.sh命令,这样才能使用这两个命令。

编译完模块后,在out/target/product/generic/system/bin目录下就能看到example_test程序,这就是我们写的C应用程序。

下一步是重新打包文件系统system.img,把example_test程序包含进文件系统镜像中,命令如下:

# make snod

重新启动Android模拟器:

# emulator -kernel kernel/goldfish/arch/arm/boot/zImage

进入命令行界面,执行C应用程序:

# adb shell

# example_test

write val 12 to device!

read val = 12

可以看到我们的C应用程序example_test访问Linux内核驱动程序example成功了。

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
86#
 楼主| 发表于 2013-1-30 09:25 | 只看该作者
Android架构分析之Android开发环境搭建

作者:刘昊昱
博客:http://blog.csdn.net/liuhaoyutz

Android版本:2.3.7_r1



一、下载google Android源码的步骤:

如果因为屏蔽问题下载不了,可以到这个网址下载:http://zhu.im/Android/

1.下载repo,执行如下命令:

wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo



2.赋于repo可执行权限:

chmod 777 repo



3.将repo拷贝到可执行程序目录下:

mv repo ~/bin/



4.执行如下命令

mkdir android_source

cd android_source

repo init -u https://android.googlesource.com/platform/manifest

上面的命令执行完成后,可以看到有哪些android版本可以下载,选择你要下载的版本,执行如下命令:

repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.7_r1

然后执行如下命令:

repo sync

即开始下载android-2.3.7_r1源码。



二、下载Linux内核步骤:

1.创建目录

mkdir kernel

cd kernel

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
87#
 楼主| 发表于 2013-1-30 09:25 | 只看该作者
2.下载内核源码

git clone https://android.googlesource.com/kernel/common.git

git clone https://android.googlesource.com/kernel/goldfish.git

git clone https://android.googlesource.com/kernel/msm.git
git clone https://android.googlesource.com/kernel/omap.git
git clone https://android.googlesource.com/kernel/samsung.git
git clone https://android.googlesource.com/kernel/tegra.git

上面的每个命令对应一种平台,可以根据需要选择需要的一个或几个执行。

执行完上面的命令后,kernel目录下会有对应的common,goldfish,msm,omap,samsung,tegar目录。选择一个目录进入,里面没有任何文件,这时,需要执行如下命令:

git branch -a

在我的电脑上,执行结果如下(common目录下):

* master

  remotes/origin/HEAD -> origin/master

  remotes/origin/android-2.6.39

  remotes/origin/android-3.0

  remotes/origin/android-3.3

  remotes/origin/android-3.4

  remotes/origin/android-3.4-compat

  remotes/origin/coupled-cpuidle

  remotes/origin/linux-bcm43xx-2.6.39

  remotes/origin/master

可以看到可用的内核版本,比如我需要3.4版本的内核,则需要执行如下命令:

git checkout -b android-3.4 remotes/origin/android-3.4

当前目录下就出现kernel源码。

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
88#
 楼主| 发表于 2013-1-30 09:25 | 只看该作者
三、编译android步骤:

1.执行命令

source build/envsetup.sh

执行这个脚本后,会初始化一些环境变量,提供了一些开发中非常有用的命令。

2.执行命令

lunch

这个命令会显示出一个选择列表,在我的电脑下,该列表如下所示

You're building on Linux



Lunch menu... pick a combo:

     1. generic-eng

     2. simulator

     3. full_passion-userdebug

     4. full_crespo4g-userdebug

     5. full_crespo-userdebug

这里列出的内容叫做Build Target,其形式是BUILD-BUILDTYPE,在Android网站上有如下解释:

All build targets take the form BUILD-BUILDTYPE, where the BUILD is a codename referring to the particular feature combination. Here's a partial list:

Build name

Device

Notes

full

    emulator

     fully configured with all languages, apps, input methods

full_maguro

    maguro

     full build running on Galaxy Nexus GSM/HSPA+ ("maguro")

full_panda

    panda

     full build running on PandaBoard ("panda")



and the BUILDTYPE is one of the following:

Buildtype

Use

user

    limited access; suited for production

userdebug

    like "user" but with root access and debuggability; preferred for debugging

eng

    development configuration with additional debugging tools



这里,我选择默认选项,即第一项generic-eng,回车。

3.执行命令

make -j4

开始编译,其中j4代表使用4个线程并行编译。

编译完成后,会出现如下信息:

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img

Install system fs image: out/target/product/generic/system.img

Installed file list: out/target/product/generic/installed-files.txt

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
89#
 楼主| 发表于 2013-1-30 09:25 | 只看该作者
四、编译Linux内核步骤

1.进入内核源码目录,下面以goldfish为例

cd kernel/goldfish

2.设置PATH环境变量

export PATH=$PATH:../../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/

3.修改主目录下的Makefile,指定ARCH和交叉编译前缀:

#ARCH ?= $(SUBARCH)

#CROSS_COMPILE  ?= $(CONFIG_CROSS_COMPILE:"%"=%)                                                                                                                                                                                       ARCH            ?= arm

CROSS_COMPILE   ?= arm-eabi-

4.生成配置文件

make goldfish_defconfig

注意只有android-goldfish-2.6.29 branch才有这个goldfish_defconfig文件,放置在arch/arm/configs目录下。而android-goldfish-3.4 branch没有这个文件。

执行完该命令后,在主目录下会生成.config文件,即配置文件。

5.执行命令

make

开始编译,编译成功会,会有如下信息:

OBJCOPY arch/arm/boot/zImage

Kernel: arch/arm/boot/zImage is ready

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
90#
 楼主| 发表于 2013-1-30 09:25 | 只看该作者
五、编译Android SDK

执行命令

make sdk

编译完成后,会有如下信息:

Package SDK Stubs: out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar

Package SDK: out/host/linux-x86/sdk/android-sdk_eng.liuhaoyu_linux-x86.zip

生成的SDK包在out/host/linux-x86/sdk/android-sdk_eng.liuhaoyu_linux-x86目录下。

打开Eclipse,选择Window/Preferences,再选择Android,设置SDK Location指向上面生成的SDK所在目录。



六、编译ADT

1.设置环境变量

ECLIPSE_HOME=~/software/eclipse

我在命令行下设置这个环境变量,运行脚本时总是提示没有设置,我的解决办法是在sdk/eclipse/scripts/build_plugins.sh文件的70行添加该语句:

ECLIPSE_HOME=~/software/eclipse

同时,把sdk/eclipse/scripts/build_plugins.sh文件的73行改为

BASE_DIR=~/buildbot/eclipse-android

即加上最开始的”~”,不在根目录下创建目录或文件,避免一些权限问题。

另外,需要注意Eclipse必须用Java EE版本,否则可能会出错。

2.创建目标目录

mkdir ADT

3.执行脚本编译生成ADT

./sdk/eclipse/scripts/build_server.sh /home/liuhaoyu/android/ADT

注意,ADT必须写绝对路径,否则会出错。

4.打开Eclipse,安装编译得到ADT

我遇到一个问题,用android_2.3.7_r1编译出来的ADT比较旧,和同样用android_2.3.7_r1编译出来的SDK并不匹配,这两个搭配使用会有问题,而用网上下载的ADT-12.0.0和用android_2.3.7_r1编译出来的SDK可以正常使用。

另外,通过Eclipse在线安装ADT也不容易,所以,我们可以在网上下载ADT离线包,再安装到Eclipse上。下载ADT离线包的地址如下:后面的版本信息可根据需要更改。

http://dl.google.com/android/ADT-12.0.0.zip

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表