androidbrowser源码
Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,下载的代码包经过解压后(这里是Android2.2的源码包),源代码的第一层目录结构如下: -- Makefile -- bionic (bionic C库) -- bootable (启动引导相关代码) -- build (存放系统编译规则及generic等基础开发包配置) -- cts (Android兼容性测试套件标准) -- dalvik (dalvik java虚拟机) -- development (应用程序开发相关) -- external (android使用的一些开源的模组) -- frameworks (核心框架——java及C++语言) -- hardware (主要保护硬解适配层HAL代码) -- libcore -- ndk -- device -- out (编译完成后的代码输出与此目录) -- packages (应用程序包) -- prebuilt (x86和arm架构下预编译的一些资源) -- sdk (sdk及模拟器) -- system (文件系统库、应用及组件——c语言) `-- vendor (厂商定制代码) bionic 目录 -- libc (C库) -- arch-arm (ARM架构,包含系统调用汇编实现) -- arch-x86 (x86架构,包含系统调用汇编实现) -- bionic (由C实现的功能,架构无关) -- docs (文档) -- include (头文件) -- inet -- kernel (Linux内核中的一些头文件) -- netbsd (?netbsd系统相关,具体作用不明) -- private (?一些私有的头文件) -- stdio (stdio实现) -- stdlib (stdlib实现) -- string (string函数实现) -- tools (几个工具) -- tzcode (时区相关代码) -- unistd (unistd实现) `-- zoneinfo (时区信息) -- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能) -- libm (libm数学库的实现,) -- alpha (apaha架构) -- amd64 (amd64架构) -- arm (arm架构) -- bsdsrc (?bsd的源码) -- i386 (i386架构) -- i387 (i387架构?) -- ia64 (ia64架构) -- include (头文件) -- man (数学函数,后缀名为.3,一些为freeBSD的库文件) -- powerpc (powerpc架构) -- sparc64 (sparc64架构) `-- src (源代码) -- libstdc++ (libstdc++ C++实现库) -- include (头文件) `-- src (源码) -- libthread_db (多线程程序的调试器库) `-- include (头文件) `-- linker (动态链接器) `-- arch (支持arm和x86两种架构) bootable 目录 -- bootloader (适合各种bootloader的通用代码) `-- legacy (估计不能直接使用,可以参考) -- arch_armv6 (V6架构,几个简单的汇编文件) -- arch_msm7k (高通7k处理器架构的几个基本驱动) -- include (通用头文件和高通7k架构头文件) -- libboot (启动库,都写得很简单) -- libc (一些常用的c函数) -- nandwrite (nandwirte函数实现) `-- usbloader (usbloader实现) -- diskinstaller (android镜像打包器,x86可生产iso) `-- recovery (系统恢复相关) -- edify (升级脚本使用的edify脚本语言) -- etc (init.rc恢复脚本) -- minui (一个简单的UI) -- minzip (一个简单的压缩工具) -- mttils (mtd工具) -- res (资源) `-- images (一些图片) -- tools (工具) `-- ota (OTA Over The Air Updates升级工具) `-- updater (升级器) build目录 -- core (核心编译规则) -- history (历史记录) -- libs `-- host (主机端库,有android “cp”功能替换) -- target (目标机编译对象) -- board (开发平台) -- emulator (模拟器) -- generic (通用) -- idea6410 (自己添加的) `-- sim (最简单) `-- proct (开发平台对应的编译规则) `-- security (密钥相关) `-- tools (编译中主机使用的工具及脚本) -- acp (Android "acp" Command) -- apicheck (api检查工具) -- applypatch (补丁工具) -- apriori (预链接工具) -- atree (tree工具) -- bin2asm (bin转换为asm工具) -- check_prereq (检查编译时间戳工具) -- dexpreopt (模拟器相关工具,具体功能不明) -- droiddoc (?作用不明,java语言,网上有人说和JDK5有关) -- fs_config (This program takes a list of files and directories) -- fs_get_stats (获取文件系统状态) -- iself (判断是否ELF格式) -- isprelinked (判断是否prelinked) -- kcm (按键相关) -- lsd (List symbol dependencies) -- releasetools (生成镜像的工具及脚本) -- rgb2565 (rgb转换为565) -- signapk (apk签名工具) -- soslim (strip工具) `-- zipalign (zip archive alignment tool) dalvik目录 dalvik虚拟机 . -- dalvikvm (main.c的目录) -- dexmp (dex反汇编) -- dexlist (List all methods in all concrete classes in a DEX file.) -- dexopt (预验证与优化) -- docs (文档) -- dvz (和zygote相关的一个命令) -- dx (dx工具,将多个java转换为dex) -- hit (?java语言写成) -- libcore (核心库) -- libcore-disabled (?禁用的库) -- libdex (dex的库) -- libnativehelper (Support functions for Android's class libraries) -- tests (测试代码) -- tools (工具) `-- vm (虚拟机实现) development 目录 (开发者需要的一些例程及工具) -- apps (一些核心应用程序) -- BluetoothDebug (蓝牙调试程序) -- CustomLocale (自定义区域设置) -- Development (开发) -- Fallback (和语言相关的一个程序) -- FontLab (字库) -- GestureBuilder (手势动作) -- NinePatchLab (?) -- OBJViewer (OBJ查看器) -- SdkSetup (SDK安装器) -- SpareParts (高级设置) -- Term (远程登录) `-- launchperf (?) -- build (编译脚本模板) -- cmds (有个monkey工具) -- data (配置数据) -- docs (文档) -- host (主机端USB驱动等) -- ide (集成开发环境) -- ndk (本地开发套件——c语言开发套件) -- pdk (Plug Development Kit) -- samples (演示程序) -- AliasActivity () -- ApiDemos (API演示程序) -- BluetoothChat (蓝牙聊天) -- BrowserPlugin (浏览器插件) -- BusinessCard (商业卡) -- Compass (指南针) -- ContactManager (联系人管理器) -- CubeLiveWall** (动态壁纸的一个简单例程) -- FixedGridLayout (像是布局) -- GlobalTime (全球时间) -- HelloActivity (Hello) -- Home (Home) -- JetBoy (jetBoy游戏) -- LunarLander (貌似又是一个游戏) -- MailSync (邮件同步) -- MultiResolution (多分辨率) -- MySampleRss (RSS) -- NotePad (记事本) -- RSSReader (RSS阅读器) -- SearchableDictionary (目录搜索) -- **JNI (JNI例程) -- SkeletonApp (空壳APP) -- Snake (snake程序) -- SoftKeyboard (软键盘) -- Wiktionary (?维基) `-- Wiktionary**(?维基例程) -- scripts (脚本) -- sdk (sdk配置) -- simulator (?模拟器) -- testrunner (?测试用) `-- tools (一些工具)
B. 安卓开发怎么在APP内部调用手机系统浏览器打开指定html并获取HTML的数据
Android开发_如何调用 浏览器访问网页和Html文件
一、启动android默认浏览器
Intent intent= new Intent();
intent.setAction('android.intent.action.VIEW');
Uri content_url = Uri.parse('http://www.cnblogs.com');
intent.setData(content_url);
startActivity(intent);
这样子,android就可以调用起手机默认的浏览器访问。
二、指定相应的浏览器访问
1、指定android自带的浏览器访问
( “com.android.browser”:packagename ;“com.android.browser.BrowserActivity”:启动主activity)
Intent intent= new Intent();
intent.setAction('android.intent.action.VIEW');
Uri content_url = Uri.parse('http://www.cnblogs.com');
intent.setData(content_url);
intent.setClassName('com.android.browser','com.android.browser.BrowserActivity');
startActivity(intent);
2、启动其他浏览器(当然该浏览器必须安装在机器上)
只要修改以下相应的packagename 和 主启动activity即可调用其他浏览器
intent.setClassName('com.android.browser','com.android.browser.BrowserActivity');
uc浏览器':'com.uc.browser', 'com.uc.browser.ActivityUpdate“
opera :'com.opera.mini.android', 'com.opera.mini.android.Browser'
qq浏览器:'com.tencent.mtt', 'com.tencent.mtt.MainActivity'
三、打开本地html文件
打开本地的html文件的时候,一定要指定某个浏览器,而不能采用方式一来浏览,具体示例代码如下
Intent intent= new Intent();
intent.setAction('android.intent.action.VIEW');
Uri content_url = Uri.parse('content://com.android.htmlfileprovider/sdcard/help.html');
intent.setData(content_url);
intent.setClassName('com.android.browser','com.android.browser.BrowserActivity');
startActivity(intent);
关键点是调用了”content“这个filter。
以前有在win32编程的朋友,可能会觉得用这种形式”file://sccard/help.html“是否可以,可以很肯定的跟你说,默认的浏览器设置是没有对”file“这个进行解析的,如果要让你的默认android浏览器有这个功能需要自己到android源码修改manifest.xml文件,然后自己编译浏览器代码生成相应的apk包来重新在机器上安装。
大体的步骤如下:
1、打开 packages/apps/Browser/AndroidManifest.xml文件把加到相应的后面就可以了
2、重新编译打包,安装,这样子,新的浏览器就支持”file“这个形式了
有兴趣的可以去试试。
C. android 怎么让系统浏览器打开指定链接
android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据 方法/步骤 为了实现这个功能可折腾了我好久,先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功。) 点击浏览器中的URL链接,启动特定的App。 首先做成HTML的页面,页面内容格式如下: <a href="[scheme]://[host]/[path]?[query]">启动应用程序</a> 这一句就可以了。 各个项目含义如下所示: scheme:判别启动的App。 ※详细后述 host:适当记述 path:传值时必须的key ※没有也可以 query:获取值的Key和Value ※没有也可以 作为测试好好写了一下,如下: <a href="myapp://jp.app/openwith?name=zhangsan&age=26">启动应用程序</a> 接下来是Android端。 首先在AndroidManifest.xml的MAIN Activity下追加以下内容。(启动Activity时给予) ※必须添加项 <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/> </intent-filter> HTML记述的内容加入<data …/>。 其中必须的内容仅scheme,没有其他内容app也能启动。 ※注意事项:intent-filter的内容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合。 所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。 复制代码 <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/> </intent-filter> 复制代码 这样的话,没有问题。 接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的: Intent i_getvalue = getIntent(); String action = i_getvalue.getAction(); if(Intent.ACTION_VIEW.equals(action)){ Uri uri = i_getvalue.getData(); if(uri != null){ String name = uri.getQueryParameter("name"); String age= uri.getQueryParameter("age"); } } 这样就能获取到URL传递过来的值了。 ——————————————————————————————————我是分割线———————————————————————————————————— 代码完了,是不是很惊奇的发现用浏览器输入 myapp://jp.app/openwith?name=zhangsan&age=26 是不是404,打不开? 楼主你这不是骗人么!楼主你个混蛋啊。 客官,稍安勿躁啊,你看看你用的浏览器是什么?UC,猎豹,欧朋?放弃吧,试试系统自带浏览器或者谷歌浏览器吧。肯定能成功的,不能成功的话再来坑我。哈哈。 ——————————————————————————————————我是分割线———————————————————————————————————— 突然觉得好悲哀,好不容易get了这个技能,却不能被第三方浏览器使用。在这个android浏览器大部分被第三方占据着的时代不得不说是个悲剧啊。 接下来还是说说为什么第三方浏览器不能成功吧。首先,我发现的是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。 最后再补充个线索吧,在浏览器里搜索网络应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的源码。 在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的 所以最后的结果应该是网络这边是起了个端口,然后在应用里启用了一个服务,来监听这个端口,来获取这个intent。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。
D. 如何修改Android中Browser的UserAgent
最近在研究Android自带的Chrome Lite浏览器,想修改下它的UserAgent,跟踪了下Android2.2的源代码,发现主要要修改如下几个地方:
1.platform/packages/apps/Browser/src/com/android/browser/BrowserSettings.java
2.platform/packages/apps/Browser/res/values/strings.xml
在strings.xml中找到这一段:
view plain to clipboardprint?
<!-- Do not tranlsate. Development option -->
<string-array name="pref_development_ua_choices" translatable="false">
<item>Android</item>
<item>Desktop</item>
<item>iPhone</item>
</string-array>
<!-- Do not tranlsate. Development option -->
<string-array name="pref_development_ua_values" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
这一段中pref_development_ua_choices对应的是Browser的debug模式下选择UserAgent时选项的名字,pref_development_ua_values对应的是不同的UserAgent,一会我会讲到这些数字分别对应的是什么UserAgent。
在BrowserSettings.java中找到这两段:
view plain to clipboardprint?
private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +
"U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, " +
"like Gecko) Version/4.0 Safari/530.17";
private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
"CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 " +
"(KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";
view plain to clipboardprint?
public void update(Observable o, Object arg) {
BrowserSettings b = (BrowserSettings)o;
WebSettings s = mSettings;
s.setLayoutAlgorithm(b.layoutAlgorithm);
if (b.userAgent == 0) {
// use the default ua string
s.setUserAgentString(null);
} else if (b.userAgent == 1) {
s.setUserAgentString(DESKTOP_USERAGENT);
} else if (b.userAgent == 2) {
s.setUserAgentString(IPHONE_USERAGENT);
}
由此我们可以看出第一段Java代码是不同的UserAgent字符串,从第二段代码中我们可以看出strings.xml中那个整数的数组和不同UserAgent的对应关系,0对应默认的UserAgent,即Android Chrome Lite自己的UserAgent,1对应的是Mac OS的UserAgent,2对应的是IPhone OS的UserAgent。
有了上述信息,添加一个自己的UserAgent就不是什么难事了,首先在strings.xml中添加一个UserAgent选项的名字,然后添加一个序号,然后在BrowserSettings.java中添加一个自己的UserAgent字符串,然后在最后一个if后面写一个
view plain to clipboardprint?
else if (b.userAgent == 3) {
s.setUserAgentString(YOUR_OWN_USERAGENT);
}
然后就大功告成了!
E. 什么手机浏览器支持查看网页源码
火狐Firefox(手机版)可以在地址栏里的原URL前加view-source:即可查看源代码。
(5)androidbrowser源码扩展阅读:
1、使用浏览器“标签页”功能PC上的浏览器“标签页”已经算是基本功能,Android手机浏览器其实也支持标签页浏览器,只是使用起来稍显复杂。
2、浏览网页时长按一个url就可以选择在新窗口打开,然后使用Menu键,再选择窗口选项查看任意标签页。