golang 移动应用例子 example/basic 源码框架分析
条件编译
我们在源码中可以看到2个文件: main.go 和 main_x.go 这两个包名都是 package main , 都有 main 函数。 不会冲突么?
答案是不会的,
main_x.go 文件中有个注释:
// +build !darwin,!linux,!windows
main.go 文件中注释如下:
// +build darwin linux windows
这里来标示编译适用的不同环境。只有满足条件的才会被编译进去, 所以这里有2个 main 函数,编译并不冲突。
参考:
http://blog.csdn.net/varding/article/details/12675971
http://dave.cheney.net/2013/10/12/how-to-use-conditional-compilation-with-the-go-build-tool
Android应用启动入口
APK文件本身是一个压缩包,直接用解压工具即可打开,但里面的文件都已被编码为二进制文件格式,不能直接看,比如程序描述文件AndroidManifest.xml,使用apktool工具可以将这些文件解码还原出来。
apktool(http://code.google.com/p/android-apktool/ 现在地址是: http://ibotpeaches.github.io/Apktool/ )是一个非常著名的开源工具包,功能很强大,可以解包APK文件并重新打包,常用来汉化Android应用。
apktool 安装方法请看: http://ibotpeaches.github.io/Apktool/install/
参考: http://kenkao.iteye.com/blog/1890497
使用这个工具我们可以看到basic.apk文件的 AndroidManifest.xml 文件的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="org.golang.todo.basic" android:versionCode="1" android:versionName="1.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:label="Basic" android:debuggable="true">
<activity android:name="org.golang.app.GoNativeActivity" android:label="Basic" android:configChanges="keyboardHidden|orientation">
<meta-data android:name="android.app.lib_name" android:value="basic" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这个就是apk文件的执行入口,而不是做服务器段开发的 main 函数入口。
这里隐含的实现了 org.golang.app.GoNativeActivity 这个Activity。
具体这里的逻辑被封装在 golang.org/x/mobile/app 代码中。
主要的核心代码如下:
func main() {
app.Main(func(a app.App) {
for e := range a.Events() {
switch e := a.Filter(e).(type) {
case lifecycle.Event:
// ...
case size.Event:
// ...
case paint.Event:
// ...
case touch.Event:
// ...
}
}
})
}
不同的事件随后触发不同的函数。完成这些功能。
从字面理解就可以知道这几个事件是做啥的。
lifecycle.Event Activity 生命周期相关的几个事件;
size.Event 屏幕尺寸变化相关事件
paint.Event 绘画屏幕的事件
touch.Event 触屏或者鼠标左键点击和移动事件
golang 移动应用例子 example/basic 源码框架分析的更多相关文章
- MJRefresh源码框架分析
MJRefresh是一款非常优秀的刷新控件.代码简洁,优雅.今天有时间对源代码阅读了一下.对MJRefresh的宏观设计非常赞叹.所谓大道至简就是这样吧. MJRefresh所采用的主要设计模式非 ...
- android adb 源码框架分析(2 角色)【转】
本文转载自:http://blog.csdn.net/luansxx/article/details/25203323 角色 l 服务 服务是提供特定功能的实体,接收请求,返回应答是服务直接最表现. ...
- android adb 源码框架分析(1 系统)【转】
本文转载自:http://blog.csdn.net/luansxx/article/details/25203269 ‘ Adb模块包括adb,adbd,源代码都在system/core/adb目录 ...
- 【lwip】09-IPv4协议&超全源码实现分析
目录 前言 9.1 IP协议简述 9.2 IP地址分类 9.2.1 私有地址 9.2.2 受限广播地址 9.2.3 直接广播地址 9.2.4 多播地址 9.2.5 环回地址 9.2.6 本地链路地址 ...
- FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分
===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...
- LinkedHashMap 源码详细分析(JDK1.8)
1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...
- RxJava && Agera 从源码简要分析基本调用流程(2)
版权声明:本文由晋中望原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/124 来源:腾云阁 https://www.qclo ...
- JUC同步器框架AbstractQueuedSynchronizer源码图文分析
JUC同步器框架AbstractQueuedSynchronizer源码图文分析 前提 Doug Lea大神在编写JUC(java.util.concurrent)包的时候引入了java.util.c ...
- 自定义View系列教程03--onLayout源码详尽分析
深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...
随机推荐
- MySQL Show命令的使用
show tables或show tables from database_name; 解释:显示当前数据库中所有表的名称 show databases; 解释:显示mysql中所有数据库的名称 sh ...
- SQL常见的可优化点
# 索引相关 # ################################################### 1. 查询(或更新,删除,可以转换为查询)没有用到索引 这是最基础的步骤,需要 ...
- js跳转到页面中指定的hash
location.hash = "#filter_moreClue";
- linux apache httpd安装(安装全部modules)
一.安装apache(http服务) 1. 从apache.org下载源码安装包 2. 解压缩# tar zxf httpd-2.2.4.tar.gz# cd httpd-2.2.4 3. 安装apa ...
- Eclipse中新建jsp文件访问页面时乱码问题
新建.jsp文件,charset和pageEncoding默认是ISO-8859-1,这样的话访问页面时会出现乱码,解决办法:将charset和pageEncoding改为UTF-8(或者GBK/GB ...
- 深入理解ThreadLocal
ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...
- [Hibernate] - Criteria Select
使用Hibernate的Criteria做查询. 参考文档: http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/querycri ...
- SQLite介绍、学习笔记、性能测试
SQLite介绍.学习笔记.性能测试 哪些人,哪些公司或软件在用SQLite: Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox可 ...
- thinkphp禁止模版标签解析
场景: 页面中某些样式或者js中含有tp定义的模版标签,如果被tp当成模版标签解析,就会解析异常. tp中提供了<literal></literal>标签用于禁止标签内部的代码 ...
- s3c2440存储控制器和地址以及启动的理解
转自:http://blog.sina.com.cn/s/blog_5ddb672b0100fkcf.html 1.首先应该先了解Flash ROM的种类 NOR FLASH地址线和数据线分开,来了地 ...