火山语言语法手册

一. 相关概念和约定:

1. 面向对象编程

火山语言基于面向对象的编程理念构造,支持类的封装、继承、多态,但是在此基础上进行了一些精简,以便能更好地学习和使用.

2. 火山语言将用户分为初级和高级用户两种.在本文档中,对于只需要高级用户掌握的部分,会以""标志进行标记.绝大多数情况下,只需要掌握初级部分即可,高级部分仅用作用户需要自行扩展火山应用到具体目标平台的适应性时使用.

 

二. 相关术语:

1. 名称:

火山语言中的名称分为以下这些:

1. 单名称:

单名称必须以英文字母/汉字字符开头,后面跟随英文字母/汉字字符/数字/'_'字符.如未特殊标注,本文档中所提出的所有"名称"均为单名称.

2. 全名称:

以句点字符组合在一起的单名称成为全名称,如"火山.程序.安卓". 单名称被包含在全名称内(被认为是使用0个句点字符组合的全名称)

3. 标识符名称:

必须由两个或多个单词文本组成,首单词必须以英文字母开头,后续单词可以以英文字母/数字/'_'字符开头,单词之间使用句点字符分隔,单词中间的字符只能为英文字母/数字/'_'字符,最后一个单词固定为此标识符的当前版本号数值.

两个标识符,如果其名称部分相同且第一个标识符的版本号大于等于第二个标识符的版本号,则说明第一个标识符能够匹配第二个标识符.
如标识符"cplus.win32.console.1",说明其名称为"cplus.win32.console",版本号为1.

注意: 火山中的名称对英文字母的大小写敏感,譬如"abc","ABC"所指定的不是同一名称.

 

2. 立即数:

立即数有以下几类:

1. 数值立即数:

1. 十进制整数或小数,小数支持使用科学计数法.

2. 十六进制整数: "0x"后跟数字0-9或字母A-B(大小写无关).

3. 字符整数值: 使用单引号括住的字符,如'A'.

如果欲强行指定数值的数据类型,可以使用"强制类型转换"操作符,譬如"(长整数)1",提供了一个数据类型为长整数的数值立即数.
如果某整数的数值超出了整数的最大有效范围,将自动被设定为长整数数据类型.

2. 逻辑型立即数: 为真/假.

3. 字符串立即数:

为用双引号括住的一段文本,文本内支持使用以下转义符:

转义符 解释
\b 退格符
\f 换页符
\r 回车符
\n 换行符
\t 水平制表符
\' 单引号
\" 双引号
\\ 反斜杠
\x 后跟1-3个十六进制字符
\ooo 后跟1-3个八进制字符

4. 数组立即数(只能在提供常量/变量初始值时使用):

为使用花括号括住的立即数的组合,如: { 1, 2 },多维数组可以嵌套,如: { { 1, 2 }, { 3, 4 } }
注意: 多维数组的各维成员数目必须相等

 

三. 火山程序结构:

一个火山程序的构成结构如下:

1. 包定义

1. 注释行

2. 嵌入行

3. 类定义

1. 注释行

2. 嵌入行

3. 类常量定义

4. 类成员变量定义

5. 类方法定义

1. 局部常量定义

2. 局部变量定义

3. 程序语句

下面是一个火山程序的基本样图(红色文字为注释):


任何定义型成员其名称如果以连续两个'/'字符引导,说明其处于被注释状态,其以及其中的所有内容在编译时都将被忽略.

1. 包定义:

一个包内可以包含多个注释行/嵌入行/类定义.

包名为全名称,如果被省略,则默认为"火山.用户.默认".

多个程序文件可以具有相同的包名,此时其中的内容被认为处于同一个包中.

2. 顶层注释行

如果在方法外部非定义类型成员中直接输入文本,将自动成为注释行,此类注释行称为顶层注释行.

提示: 任何种类的注释行如果尾部以一个或多个减号/等号字符结束,IDE将自动在其后绘制对应长度的单/双分隔线.可以在设置选项中将此机制关闭.

3. 嵌入行

顶层注释行或者方法语句行行首如果以一个独立的'@ '字符开头(与后面的内容必须用空白字符隔开),则称为嵌入行,该嵌入行在编译时将被直接发送到目的平台编译器,由用户自身保证该行的正确性.

顶层注释行中可以使用"@begin"和"@end"关键字行括住一个块(注意不支持在方法语句行中使用),其中的所有行都将被视作嵌入行.

嵌入行中可以使用连续两个'/'字符引导一段一直到行尾的注释文本.

嵌入行中可以使用以下替换符引用外部火山名称:

格式 解释 样例
@<成员名称> 引用所指定的成员名称 @<对象变量1>.test, @<对象变量1.成员1>
@n<成员名称> 引用所指定的成员名称,与前面格式文本不同的是:

  1. 本格式文本仅加入最后一个成员名称. 譬如"@n<对象变量1.成员1>"仅会加入最后的"成员1"的名称,而不会加入前面的所有中间名称;

  2. 本格式文本引用成员时,不受静态成员访问格式限制. 譬如"@n<类1.成员1>",即使"成员1"不是常量/静态成员也可以被引用到;

  3. 本格式文本引用成员时,不受访问权限的限制(譬如所访问成员是否公开等).

由于去除了这些限制,开发者必须谨慎使用此替换符,必须能够保证该替换符获得的名称在任何场合下均能正常工作.

@n<对象变量1.成员1>
@dt<数据类型名称> 引用所指定的数据类型名称,包括: 基本数据类型/模板数据类型/类.
注意:

1. 不支持数组数据类型;

2. 如果本替换符后跟随的不是对象成员访问字符(譬如句点),别名类将使用其所封装的本地类名,常量类将使用其所对应的基本数据类型.

@dt<整数>, @dt<模板类型1>, @dt<类1>, @dt<包1.类1>.静态变量1
@pkg<包名称> 引用所指定的包名称 @pkg<火山.用户.程序>
@an<约定名称> 引用所指定的全局/项目插件约定名称 @an<onInitAndroidActivity>
@sn<特定名称> 引用所指定的特定名称,具体列表如下:

  1. "current_class": 嵌入行当前所处类名;

  2. "current_package": 嵌入行当前所处包名;

  3. "base_class": 嵌入行当前所处类的基础类名;

  4. "startup_class": 程序启动类名;

  5. "startup_package": 程序启动包名;

  6. "this": 只能在非静态嵌入式方法中的嵌入文本行里使用,将被替换为调用该嵌入式方法时提供的调用对象;

  7. "quot": 双引号字符;

  8. "apos": 单引号字符;

  9. "rand_name": 一个随机生成的程序内唯一性名称

@sn<current_class>
@sn<current_package>
@sn<base_class>
@sn<startup_class>

@sn<startup_package>
@sn<this>
@sn<quot>
@sn<apos>
@sn<rand_name>

@def_macro 定义可以在嵌入行中使用的宏,目前不支持在方法中定义. 语法格式为:

  1. 不携带参数表方式:

      @def_macro 宏名称 宏内容

      在使用该宏时将直接使用宏内容对该宏进行替换.

      如: @def_macro TEST wutao

      使用该宏时,如 @m<TEST>,该宏替换后的实际内容将为 wutao .

 

  2. 携带参数表方式:

      @def_macro 宏名称(宏参数名称, ...)  宏内容

      注意事项:

      A. 参数表的左括号必须紧跟在宏名称后面,中间不能存在空白字符,不然就会被认为是宏内容的一部分;

          如: @def_macro TEST(param1) param1

          该宏的名称为TEST,具有一个名为param1的宏参数,宏内容是直接使用该参数.

          如果左括号与TEST之间存在空白字符的话,如: @def_macro TEST  (param1) param1

          那么该宏就是一个名为TEST,没有参数,宏内容为"(param1) param1".

      B. 参数表中可以包括一个或多个宏参数名称,多个参数名称之间使用逗号进行分隔;

          如: @def_macro MY_ADD(param1, param2) param1 + param2

      C. 宏内容中可以使用参数表内定义的宏参数名称,在使用该宏时将使用对应的实际参数内容进行替换;

      D. 在宏内容中所使用的宏参数名称,如果其前方为1个'#'字符,该"#宏参数名"在进行宏替换时将被替换为字符串格式,即自动在两侧加上双引号;

          如: @def_macro TEST(param1) #param1

          使用该宏时,如 @m<TEST> (abc) ,该宏替换后的实际内容将为 "abc" ,注意abc两侧双引号也是替换后内容的一部分.

      E. 在宏内容中所使用的宏参数名称,如果其前方为2个'#'字符,该"##宏参数名"在进行宏替换时将自动与其前方内容连接起来.

          如: @def_macro TEST(param1) wutao_##param1

          使用该宏时,如 @m<TEST> (abc) ,该宏替换后的实际内容将为 wutao_abc ,前后文本将连接在一起.

      F. 如果使用宏时所提供的实际参数数目超出当前所定义宏参数数目,则所有多余参数内容将被统一视为最后一个宏参数的替换内容.

          如: @def_macro TEST(param1) param1

          使用该宏时如果提供了多余的参数,如 @m<TEST> (abc, bcd) ,则最终得到的替换结果就是 abc, bcd ,而不会报错.

          此特性是为了支持将目标语言的复杂代码文本指定为宏的最后一个参数的内容,如:

              @m<TEST> (myObject.myMethod (1, 2, 3)) ,最终得到的替换结果就是 myObject.myMethod (1, 2, 3) .

 

  3. 多行宏内容:

      如果宏内容包括多行,可以在当前行的尾部使用'\'字符标记其紧接着的下一嵌入行也属于本宏的内容.如果当前行的尾部为双引号,而且下一行的首部也为双引号,则这两个字符串将合并到一起.

      如:

          @def_macro TEST wutao  \

          volcano  \

          dev

      使用该宏时所最后得到的替换结果为:

          wutao

          volcano

          dev

      再如:

          @def_macro TEST "wutao "  \

          "volcano"

      使用该宏时所最后得到的替换结果为:

          "wutao volcano"

  4. 宏内容中可以使用本表中列出的除开宏定义本身以外的所有其它替换符,包括使用其它宏.

@m<宏名称> (参数表) 使用所指定名称的宏,可以在后方跟随一个参数表(注意此处不再限制左括号与其前方不能留空白字符),参数表中的所有参数用作替换对应的宏参数.

注意:

  1. 如果所欲使用的宏在类中定义,并且当前使用位置不位于该类中,则必须在宏名称前加上类名前缀;

  2. 如果所使用宏未指定类名前缀,且其当前使用位置所处类及程序全局中均定义有该名称的宏,则将使用类中定义的宏;

  3. 可以跨多行提供宏参数表.

使用格式:

  1. 不携带参数表方式:

      如: @m<TEST>

  2. 携带参数表方式:

      如: @m<TEST> ("wutao", "volcano")

      注意如前所述,如果所提供的实际参数数目大于所使用宏中定义的宏参数数目,则所有多余部分将被视为宏的最后一个参数的内容.

4. 类定义

火山类可以单根继承一个基础类,引用类名时可以直接使用类名称,或者使用"包名.类名"进行全名引用.

名称为"启动类"的类被用作定义启动用户程序的类

基本属性表:

名称 解释
基础类 指定本类的基础类名称,可以是单名称/全名称,也可以是空文本(表示无基础类).

如果本类为模板基础类,则可以使用模板数据类型来动态提供其基础类.

公开 指定本类是否对外公开.公开类可以在所处包外部被访问,而非公开类只能在所处包内部被访问.

5. 类成员常量或局部常量定义

常量用作定义一个不允许在程序中进行修改的恒定值.

注意: 类的成员常量在外部应该通过"类名.常量名"的方式来引用.

基本属性表:

名称 解释
类型 提供常量的数据类型,只能是基本数据类型或常量类.
公开 指定本常量是否公开.公开常量可以在所处类外部被访问,而非公开常量只能在本类或者其继承类中访问.
本属性仅对类常量有效
初始值 提供常量的初始值立即数,必须对应常量的数据类型.

1. 在设置常量初始值时,只能提供立即数,不能引用其它常量.
2. 可以使用'@'字符引导的文本来指定常量的本地初始化值文本(用户自行保证其有效性,火山编译器不会检查).

6. 类成员变量或局部变量定义

变量的内容允许在程序中动态修改.

如果未提供初始值,数值型变量的初始值为0,逻辑型变量的初始值为假,文本型变量的初始值为空文本,参考变量的初始值为空对象.

非静态的类成员变量,如果其数据类型为类且其中定义有事件,将被自动挂接到当前类实例对象.

基本属性表:

名称 解释
类型 提供变量的数据类型
静态 指定是否为静态变量.静态变量在所处类载入后即保持始终存在.
由于静态变量初始化时不存在所处类实例,静态成员变量不支持自动挂接其事件到其所处类,在需要时必须通过"接收事件"命令手动挂接.
注意: 类的静态成员变量在外部应该通过"类名.变量名"的方式来引用.
参考 指定是否为参考变量
变量的参考属性如果为假,将自动创建一个对应数据类型的实例对象;如果为真,则仅为指向另外一个已有实例对象的引用,本身并不创建实例对象.
公开 指定本变量是否公开.公开变量可以在所处类外部被访问,而非公开变量只能在本类或者其继承类中访问.
本属性仅对类成员变量有效
初始值 提供变量的初始值,必须对应变量的数据类型.
在设置变量初始值时,可以提供立即数,也可以引用其它常量.

7. 类方法定义

定义类的方法

名称为"类_初始化"的方法为类的初始化方法(在类对象被创建时自动调用),该方法不携带任何参数并且不返回值.

名称为"类_清理"的方法为类的清理方法(在类对象被销毁时自动调用),该方法不携带任何参数并且不返回值. 注意:在某些目标语言平台(如Java)上,类清理方法不会被支持.

基本属性表:

名称 解释
返回值类型 提供方法执行完毕后所返回数据的数据类型
静态 指定是否为静态方法
注意:

1. 类的静态方法需要通过"类名.方法名"的方式来引用;

2. 如果静态方法所定义第一个参数的数据类型为方法所处类本身而且没有指定非空参数匹配需求类型,那么可以基于该类对象以动态格式来调用该静态方法,编译器将自动进行转换. 如: 假设"类1"中定义了"方法1",而"方法1"的第一个参数数据类型为"类1",类似这样的静态调用格式"类1.方法1 (类1对象, ...)"可以以"类1对象.方法1 (...)"的动态调用格式进行书写.

类别 指定方法的具体类别,可以为以下几种之一:

1. 通常: 表明本方法为通常方法

 

2. 属性读: 表明本方法为属性读取方法.

如果属性读方法为静态方法,所要求的定义格式:

A. 必须定义且只能定义一个参数,该参数的数据类型必须为属性读方法所处类本身;

B. 必须定义有返回值,该返回值的数据类型不能为数组,该数据类型即为本属性被读取时的数据类型.

如果属性读方法不为静态方法,所要求的定义格式:

A. 不能定义参数;

B. 必须定义有返回值,该返回值的数据类型不能为数组,该数据类型即为本属性 被读取时的数据类型.

注意:

A. 在程序中,必须以与变量相同的引用方式来访问属性读方法. 如: "类对象1.属性1";

B. 如果存在同名属性写方法,则两者的数据类型必须一致;

C. 在全局类中不能定义属性读方法.

3. 属性写: 表明本方法为属性写入方法.

属性写方法在所处类中定义了一个同名的属性,该属性可以在该类对象变量的"属性"列中被赋予初始值.

如果属性写方法为静态方法,所要求的定义格式:

A. 必须未定义返回值;

B. 必须定义且只能定义两个参数,第一个参数的数据类型必须为属性写方法所处类本身.第二个参数的数据类型不能为数组,该数据类型即为本属性被写入时的数据类型.

如果属性写方法不为静态方法,所要求的定义格式:

A. 必须未定义返回值;
B. 必须定义且只能定义一个参数,该参数的数据类型不能为数组,该数据类型即为本属性被写入时的数据类型.

注意:

A. 在程序中,必须以与变量相同的引用方式来访问属性写方法. 如: "类对象1.属性1 = 1";

B. 如果存在同名属性读方法,则两者的数据类型必须一致;

C. 在全局类中不能定义属性写方法.

4. 定义事件: 定义本类对象将会发送事件的名称及格式,此种方法必须满足以下格式要求:

1. 方法体必须为空;
2. 返回值数据类型必须为整数;
3. 不能为静态方法.

5. 接收事件: 定义本类对象将会接收本类中成员变量对象所发送的事件,此种方法且必须满足以下要求:

1. 返回值数据类型必须为整数;
2. 不能为静态方法;
3. 方法名称格式必须为: 事件对象类名 + "_" + 欲接收事件名;
4. 方法的第1个参数的数据类型必须为欲接收其事件的事件对象类名;
5. 方法的第2个参数的数据类型必须为整数,用作接收"接收事件"关键字调用所提供的"标记值"参数值(非该方式挂接事件则此参数值固定为0);
6. 方法其余参数的数目及数据类型必须与欲接收事件的定义方法一致.

公开 指定本方法是否公开.公开方法可以在所处类外部被访问,而非公开方法只能在本类或者其继承类中访问.
参数表 定义本方法的所有参数

8. 程序语句

提供具体的方法语句代码,语句行中可以使用连续两个'/'字符引导一段一直到行尾的注释文本.

 

四. 火山语言关键字表:

1. 基本数据类型关键字:

名称 输入字1 解释
字节 sbyte 字节(有符号)基本数据类型,有效值范围从-128到127,占用1个字节空间.
短整数 short 短整数基本数据类型,有效值范围从-32768到32767,占用2个字节空间.
字符 wchar 宽字符基本数据类型,有效值范围从0到65535,占用2个字节空间.
整数 int 整数基本数据类型,有效值范围从-2147483648到2147483647,占用4个字节空间.
长整数 long 长整数基本数据类型,有效值范围从-9223372036854774808到9223372036854774807,占用8个字节空间.
小数 double 双精度小数基本数据类型,有效值范围从1.797693e+308到4.9000000e-324,占用8个字节空间.
逻辑型 bool 逻辑型基本数据类型,有效值为真/假.
文本型 string 文本型基本数据类型,用作记录一段字符串文本.
模板类型1 -> 模板类型8   模板数据类型,只能在模板基础类中使用,其所对应的真实数据类型需要由模板实现类来提供.

2. 名称关键字:

名称 输入字1 解释
对象名称关键字:
本对象 this 用作在类成员方法中代表所处类的对象本身
父对象 super 用作在类成员方法中代表所处类的父对象,注意本关键字只能在句点操作符的第一个参数位置处使用.
立即数名称关键字:
true 用作代表逻辑值真
false 用作代表逻辑值假
空对象 null 用作代表空对象,可以匹配所有非常量类的类数据类型以及文本型.

3. 操作符关键字:

名称 特性 优先级 输入字1 首/左侧参数 右侧参数 解释
. [可扩展] 1   欲访问对象名称 欲访问对象成员名称 句点分隔操作符,用作分隔对象与其成员名称.
[] [只能为参数]

[可扩展]

1   欲访问数组数据 [整数] 欲访问数组成员索引值 数组成员访问操作符,用作访问所指定索引位置处的数组成员.
- [只能为参数]

[右结合]

2   [数值] 欲取反的数值   算术取反操作符,用作返回将指定数值进行符号翻转后的结果值.
强制类型转换 [只能为参数]

[右结合]

2   欲转换到数据类型名称 欲转换数据类型的数据 类型强转操作符,用作将数据转换到所指定的数据类型.格式为:"(欲强转数据类型)欲转换类型的数据".
允许以下数据类型之间进行强制转换:
  1. "空对象"可以强制转换到任何类数据类型(包括常量类)或文本型;

  2. "空对象"强制转换到数值型常量类时自动被转换为数值0,转换为逻辑型常量类时自动被转换为假,转换为文本型常量类时自动被转换为空文本;
  3. 数值数据类型之间可以强行转换;
  4. 常量类可以强制转换到其所对应的基本数据类型;
  5. 类数据类型只能强制转换到其基础类或者继承类.

* [只能为参数]

[可扩展]

3   [数值] 被乘数 [数值] 乘数 算术相乘操作符,用作计算两个数值的相乘结果.
/ [只能为参数]

[可扩展]

3   [数值] 被除数 [数值] 除数 算术相除操作符,用作计算两个数值的相除结果.
% [只能为参数] 3   算术模除操作符,用作计算两个整数的相除后的余数.
+ [只能为参数]

[可扩展]

4   [数值/文本] 被加数 [数值/文本] 加数 相加操作符,用作计算两个数值/文本的相加结果.
- [只能为参数]

[可扩展]

4   [数值] 被减数 [数值] 减数 算术相减操作符,用作计算两个数值的相减结果.
<= [只能为参数] 5   [数值] 被比较数值 [数值] 比较数值 小于等于逻辑比较操作符,当左侧参数小于等于右侧参数时返回真.
>= [只能为参数] 5   大于等于逻辑比较操作符,当左侧参数大于等于右侧参数时返回真.
< [只能为参数] 5   小于逻辑比较操作符,当左侧参数小于右侧参数时返回真.
> [只能为参数] 5   大于逻辑比较操作符,当左侧参数大于等于右侧参数时返回真.
属于 [只能为参数] 5 instanceof [对象] 被检查对象 用作检查的类名 返回左侧对象是否为右侧类或者其继承类的实例对象
== [只能为参数] 6   [数值/逻辑型/文本/数组/对象] 被比较值 [数值/逻辑型/文本/数组/对象]  比较值 等于/不等于逻辑比较操作符,当左侧参数等于/不等于右侧参数时返回真.
注意:
对于数组或文本对象,唯一能够与其进行比较的是"空对象".
!= [只能为参数] 6  
&& [只能为参数]

[可扩展]

7 [逻辑型] 逻辑值一 [逻辑型] 逻辑值二 并且逻辑操作符,当左侧参数和右侧参数均为逻辑值真时返回真.
|| [只能为参数] 7 或者逻辑操作符,当左侧参数和右侧参数其中任意一个为逻辑值真时返回真.
= [右结合] 8   赋值到的变量

用作提供赋值用数据

赋值操作符,将右侧参数的值赋予给左侧参数所指定的变量.

注释:

1. 优先级值越小表明优先级越高;

2. "特性"列中的"[只能为参数]"表示该操作符只能位于语句参数中; "[右结合]"表示 操作符参数为右结合,"[可扩展]"表明右侧参数可以被扩展.

4. 命令关键字:

名称 特性 输入字1 参数类型 参数名称 参数解释 返回值 解释
循环类关键字:
判断循环 [需求语句体] while 逻辑型 判断值 当此参数值为真时进入循环体,为假时将跳过循环体.   本命令根据提供的逻辑参数的值,来决定是否进入循环体.如果提供的逻辑参数值为真,程序顺序执行下一条语句进入循环体,否则跳转到本命令循环体的下一条语句处.
循环 [需求语句体]

[隐藏空参数表]

for 整数 [可省略] 变量起始值 定义循环变量的起始数值.如果被省略,默认值为0.   本命令将利用变量对循环体内的命令进行循环执行.第一次执行此命令时将使用"变量起始值"参数初始化"循环变量"参数所指定的变量.每次(包括第一次)执行到此命令处都将判断循环变量内的值是否已经 到达"变量目标值"参数所指定的值,如已等于或超过,则跳转到循环体的下一条语句处,否则进入循环体.
整数 [可省略] 变量目标值 定义循环变量的目标数值,在循环首部如果发现循环变量值已到达此目标值时(递增值小于0时小于等于目标值,递增值大于0时大于等于目标值)将跳出循环 而不再进入循环体.如果被省略,默认值为1.
整数 [可省略][需求可写变量] 循环变量 本整数型变量将用作控制循环执行次数,在循环尾部将自动递增或递减该变量内的数值(由变量递增值参数决定).循环体中的用户程序可以直接取用此变量中的值.如果被省略,将自动使用内部临时变量.
整数 [可省略][需求立即数] 变量递增值 每次执行到循环尾部时都将把此值加入到循环变量中去,此值可为正数或负数,如为正数则递增,为负数则递减.如果被忽略,则默认值为1. 注意: 必须为本参数提供非0整数立即值,以便编译器建立循环结束条件.
流程控制类关键字:
如果 [需求语句体] if 逻辑型 判断条件 本条件值的结果决定下一步程序执行位置   本命令根据所提供逻辑参数的值,来决定是否改变程序的执行位置.如果提供的逻辑参数值为真,程序继续顺序向下执行进入本命令的子语句体,然后跳过本命令后续所有的"另如"命令,为假则将跳过本命令的子语句体.
另如 [需求语句体]

[隐藏空参数表]

elseif 逻辑型 判断条件 本条件值的结果决定下一步程序执行位置. 注意: 本参数可忽略以不提供,但是此时不能再后续跟随其它的"另如"语句.   本命令只能放在"如果"或其它"另如"命令的后面,根据所提供逻辑参数的值,来决定是否改变程序的执行位置.如果提供的逻辑参数值为真,程序继续顺序向下执行进入本命令的子语句体,然后跳过本命令后续所有的"另如"命令,为假则将跳过本命令的子语句体.
到循环尾 [隐藏空参数表] continue         本命令转移当前程序执行位置到当前所处循环体的尾部
跳出循环 [隐藏空参数表] break         本命令转移当前程序执行位置到当前所处循环体尾部的下一条语句处
返回 [隐藏空参数表] return   [可省略] 返回值 当所处方法定义有非空返回值数据类型时,必须提供返回到调用方的具体值,否则必须省略掉本参数,即两者必须对应.   本命令转移当前程序执行位置到调用本语句所处方法的下一条语句处,并可根据需要返回一个值到调用语句处.
运算类关键字:
取反     逻辑型 待取反逻辑值 提供将其反转的逻辑值 逻辑型 将所指定逻辑值进行反转,返回反转后的结果.
位取反     所有整数型 待取反整数值 提供将其所有位反转的整数值 对应整数型 将所指定整数值的每一位进行反转,返回反转后的结果.
位与     所有整数型 整数参数一 提供用作位操作的整数参数值一 对应整数型 将参数1的每一位与参数2的对应位进行与操作,返回运算后的结果.
所有整数型 整数参数二 提供用作位操作的整数参数值二
位或     同"位与" 将参数1的每一位与参数2的对应位进行或操作,返回运算后的结果.
位异或     将参数1的每一位与参数2的对应位进行异或操作,返回运算后的结果.
位左移     所有整数型 待位移整数值 提供被位移的整数值 对应整数型  将参数1的每一位向左移动参数2所指定的数目,返回运算后的结果.
所有整数型 位移数目 提供进行位移的位数
位右移     同"位左移" 将参数1的每一位向右移动参数2所指定的数目,返回运算后的结果.
编译时处理关键字:
编译出错   cerror         仅在编译程序时起作用,用作告知编译器发现了编译错误并停止编译.
调试类关键字:
调试检查   assert 逻辑型 检查值 在调试版中,当此参数值为假时,程序将中断执行并报错.   本命令仅在编译程序的调试版本时被执行,在编译发布版时所处整条语句均将被忽略不被编译.在调试版中,当所提供的参数值为假时,程序将在此处中断执行并报错.
文本型 [可省略] 检查失败信息 指定当检查失败时(检查值参数为假)所输出的信息.如果被省略,则默认为空文本.
为调试版           逻辑型 返回当前所编译程序是否为调试版本
其它:
挂接事件     对象 欲挂接其事件的对象 提供欲将其所定义事件挂接到当前类对应事件接收方法的对象   将指定对象所支持的事件挂接到当前类对象中的对应事件接收方法上. 本命令仅用作动态挂接对象事件,类中定义的成员对象变量除非明确指定不自动挂接,均会自动挂接事件.
整数 标记值 用作提供欲挂接其事件的对象所对应的标记值,由用户自行定义.该值将被原值发送给事件接收方法,用作区分具体的事件来源.如果被省略,则默认为0.
取消事件挂接     对象 欲取消其事件挂接的对象 提供欲取消将其所定义事件挂接到当前类对应事件接收方法的对象   不再将指定对象所支持的事件挂接到当前类对象中的对应事件接收方法上

注释:

1. "特性"列中的"[需求语句体]"表示该命令需要携带一个子语句体,"[隐藏空参数表]"表示当该命令的参数表为空时将被省略掉不显示;

2. "参数表"列中的"[可省略]"表示该参数可以被省略不提供;"[需求可写变量]"表示必须为该参数提供一个可写入变量或参数;"[需求立即数]"表示必须为该参数提供一个立即数.

 

五. 扩展属性:

1.程序成员的所有属性由基本属性和扩展属性两部分组成,扩展属性可以应用在所有定义型程序成员上;

2.扩展属性有以下几种:

A. 类中定义的"属性变量"扩展属性值为真的成员变量;

B. 类中定义的所有属性写方法;

C. 所设置扩展属性可以是属性的子属性,如"可读属性1.可读属性2.可写属性3",前面的父属性必须为可读取属性,最后一个属性必须为可写入属性;

D. 火山系统定义的全局扩展属性(属性名以'@'开头);

E. 项目插件定义的项目扩展属性(属性名以'@'开头).

3. 属性值可以引用程序中定义的常量或者提供对应数据类型的立即数. 注意:

A. 即使属性数据类型为常量类,也可以直接提供对应的立即数值(除开下面C条例外). 譬如,假设属性A的数据类型为"可绘制资源"(安卓平台项目下提供),那么属性值除了可以为其提供一个同样数据类型的常量以外,还可以直接为其提供一个可绘制资源文件名;

B. 如果属性指定只能从其提供的选择列表中选择属性值(譬如下面的"@值细节类型"),则属性值只能从这些列表项中选择;

C. 如果属性数据类型为常量类且该类中定义有常量成员,则属性值只能从这些常量中选择.

4. 火山系统定义的全局扩展属性表:

名称 数据类型 相关特性 应用场合 解释
@输出名 文本型   任何定义型程序成员 本属性可以应用于任何定义型成员,用作指定其编译后的输出名称(不使用本属性进行指定则编译器会自动为它生成一个输出名称),编译器会保证其它所自动生成的输出名称不会与此指定名发生冲突.所提供输出名称如果以'@'字符开头,表明为引用全局/项目约定名称.
@自动挂接事件 逻辑型   非静态类成员变量 本属性可以应用于数据类型为类的非静态成员变量上,用作指定是否自动将该类对象所支持的所有事件挂接到本类上.如果没有指定本属性,默认值为真.
@属性变量 逻辑型   非静态类成员变量 本属性可以应用于非静态的类成员变量(数据类型只能是基本数据类型或常量类数据类型)上,用作指定该成员变量是否为其所处类的属性型成员.
@值细节类型 整数   类或者类的属性写成员(属性型成员变量或属性写方法) 当应用于类时,指定该类数据类型值的细节类型; 当应用于类的属性型成员时,指定该属性值的细节类型. 可以为以下选择项之一:

1. 颜色: 为RGB十六进制颜色数值;
2. 文件名: 为文件名(可以通过"@附加文本"属性提供其过滤器文本);
3. 字体: 为字体信息,格式为: "字体名, 字体尺寸, 是否为粗体, 是否为斜体", 其中"是否"字段,用1代表真,0代表假;
4. 定宽字体: 与"字体"类型不同的是仅限定宽字体.

@列表选择项 文本型   类的属性写成员(属性型成员变量或属性写方法) 本属性提供一系列备选列表文本,各个备选文本之间使用换行符分隔,用作在输入类的初始值/类属性成员的属性值时直接选择输入.
本属性的有效条件如下: 1. 所对应成员必须未指定细节类型; 2. 所对应成员如果为类的属性型成员,仅当该成员的数据类型是整数/文本型或对应类型的常量类时有效.
当成员的数据类型为整数时,属性值在编译时将被自动转换为以0开始的整数索引值.
@附加文本 文本型   类的属性写成员(属性型成员变量或属性写方法) 本属性用作提供附加文本信息:

1. 当所对应成员细节类型为"文件名"时,用作提供具体文件名过滤器文本: 该文本必须以'|'分隔和结束,类似以下格式: "JPG文件(*.jpg;*.jpeg)|*.jpg;*.jpeg|GIF动画(*.gif)|*.gif|",尾部会自动加上能匹配所有文件的过滤器.

@常量类 整数   本属性只能应用于类,用作指定该类是否为常量类及其所对应的基本数据类型.
可以为以下选择项之一,用作指定其所对应的基本数据类型:

1. 字节;
2. 短整数;
3. 字符;
4. 整数;
5. 长整数;
6. 小数;
7. 逻辑型;
8. 文本型;
9. 文本到ID(常量初始值内容是文本类型,但数据类型为整数型,由编译器进行特定处理)

常量类特点及注意事项:

1. 常量类用作建立对应某基本数据类型数据的特定类,类中只允许定义数据类型为该类的常量成员.如果类中所定义常量成员的数据类型为空,则其数据类型会自动默认为所处常量类;

2. 如果存在类的继承,常量类的基础类只能是常量类(两者所对应的基本数据类型必须一致),非常量类的基础类只能是非常量类,两者不能混用;

3. 数据类型为常量类的局部变量在访问前必须首先明确赋值.

@别名 文本型   本属性只能应用于类定义成员上,声明该类为别名类.

别名类用作直接封装所指定的目标语言本地类,在程序中使用别名类等于直接使用所对应的本地类.
别名类具有以下使用限制:
  1. 别名类如存在基础类,必须也是别名类,且用户必须自行保证该基础别名类所封装的本地类为本别名类所封装本地类的基础类,非别名类的基础类不能是别名类;
  2. 别名类中只允许定义常量或静态成员;
  3. 如果目标语言支持包/命名空间,所封装的本地类名必须为全名称;
  4. 如果允许该别名类创建对象,所封装的本地类必须提供有默认无参数构造方法.

别名类可以为其它非别名类的基础类,支持使用类似"ArrayList<E>"这样的本地模板类名,如果当前类同时为模板基础类,支持在其中使用火山模板数据类型.

注意: 如果封装的是类似Java接口这样的数据类型,务必将"@禁止创建对象"属性设置为真,避免用户以错误的方式使用此别名类.

@全局类 逻辑型   本属性只能应用于类定义成员上,用作为指定当前类为全局类.全局类中的所有静态公开方法在外部访问时都可以省略其类名指定(嵌入文本语句中除外),此类方法被称为"全局方法".
@模板基础类 逻辑型   本属性只能应用于类定义成员上,用作指定当前类为模板基础类.

模板基础类不能同时为常量类或模板实现类,模板基础类的基础类可以也为其它模板基础类.

模板基础类只能用作模板实现类或其它模板基础类的基础类,或者在该类内部使用,除此之外不能在其它任何场合使用,只有在模板基础类中才能使用模板数据类型.

在模板基础类中,在以下位置可以使用模板数据类型:

1. 所有可以使用数据类型的位置;

2. 模板基础类的"@外部基础类"属性值;

3. 模板基础类的"@别名"属性值;

4. 模板基础类的基础类属性.

需要注意的是:

1. 由于模板基础类中的内容会被整体复制到模板实现类中然后进行模板数据类型替换,所以模板基础类中的代码不要去访问其所在包中的非公开类,因为其实际编译位置是位于模板实现类内,而模板实现类不见得会与模板基础类位于同一个包中;

2. 同样的原因,在模板基础类中引用外部本地类名(譬如Java类)时,需要使用全名称.

@模板实现类 文本型   本属性只能应用于类定义成员上,用作指定当前类为模板实现类.

模板实现类不能同时为常量类或模板基础类,模板实现类的基础类必须为模板基础类.

本属性值用作为模板基础类中所使用到的所有模板数据类型顺序提供对应的实际替换数据类型(从模板类型1开始),多个替换数据类型之间用逗号或换行符分隔.

模板实现类实现模板基础类的具体算法为:

1. 首先将模板基础类中的所有内容添加到模板实现类的内容尾部,然后将其中所有使用了模板数据类型的位置用本属性值中提供的对应替换数据类型进行替换,所有使用了模板基础类本身的位置使用模板 实现类替换;

2. 然后将模板基础类的基础类设置为本模板实现类的基础类,将模板基础类的所有属性添加到本模板实现类的属性表中(跳过所有当前在模板 实现类中已经存在的);

3. 如果模板基础类的基础类仍然为模板基础类,则跳到步骤1重复执行;

4. 对所有从模板基础类中添加进来的"类_初始化"和"类_清理"方法进行处理,确保其能够被自动执行且执行顺序正确.

@默认基础类 逻辑型   本属性只能应用于类定义成员上,当其它类(不包括常量类)没有指定基础类时,将使用该类作为其它类的默认基础类.

注意:

1. 整个应用程序中只允许一个类被定义为默认基础类;

2. 被定义为默认基础类的类不允许定义有基础类;

3. 被定义为默认基础类的类不允许为常量类;

4. 必须确保所定义的默认基础类也为所有外部本地类的实际基础类;

5. 必须确保所定义的默认基础类定义有无参数构造方法.

@禁止创建对象 逻辑型   本属性只能应用于类定义成员上,用作指定是否允许定义类型为该类的变量或变量数组("参考"属性为真的变量/变量数组/参数不在限制之内).
@禁止静态 逻辑型   本属性只能应用于类,用作指定是否允许在程序中定义该类及其所有继承类的静态或静态参考变量.
@禁止继承 逻辑型   本属性只能应用于类定义成员上,用作指定是否不允许本类作为其它类的基础类.

注意有以下特例:

1. 在一个别名类上设置此属性并不能阻止它成为其它别名类的基础类;

2. 在一个模板基础类上设置此属性并不能阻止它成为其它模板基础类/模板实现类的基础类.

@强制输出 逻辑型   类/方法 本属性只能应用于类/方法定义成员上,用作指定该类/方法将被强制编译输出.

正常情况下,编译器会仅编译并输出被程序启动类或启动方法直接或间接访问的类/方法,此属性仅用作强制编译输出未被程序启动类或启动方法直接或间接访问的类/方法,一般用作自动加入一些被目标平台默认使用的类,譬如登记到安卓程序清单文件中的"应用程序类"/"服务类"/"广播接收器类"等.

@强制依赖 文本型 [允许多设置项] 类/方法 本属性只能应用于类/方法定义成员上,用作强制指定一个或多个类作为本类/方法的依赖类(多个依赖类名之间使用逗号或换行符分隔),一旦本类/方法被用户程序使用,则其所有在此处指定的依赖类均认为被使用.

正常情况下,类之间的依赖关系会被编译器自动判别,此属性仅用作当本类/方法中未曾实际使用到某类时强制指定其为本类/方法的依赖类.

@外部基础类 文本型   类的基础类属性 本属性用作指定一个本地类名作为当前类的基础类名称,编译器将不进行任何检查. 注意:

1. 此时当前类应该没有定义基础类;
2. 不能将本属性值指向一个火山类名,因为系统不会对其进行引用检查,因而该火山类可能会因为没有被引用而在代码优化时被删除;
3. 如果定义了非空外部基础类,则编译器编译本类时将不会再自动生成本类的无参数空白构造方法.

支持使用类似"ArrayList<E>"这样的本地模板类名,如果当前类为模板基础类,支持在其中使用火山模板数据类型.

@虚拟方法 整数   方法 本属性只能应用于普通类型的非静态方法定义成员上,用作指定该方法为虚拟方法(类的多态).
虚拟方法可以在其继承类中被覆盖,继承类中用作覆盖的虚拟方法必须与其基础类中对应虚拟方法的名称/公开状态/返回值/参数表完全相同.

属性值可以为以下选项值之一:

1. 可覆盖: 为可覆盖虚拟方法,继承类可以通过定义与本方法同名同返回值同参数表的虚拟方法来覆盖本方法;

2. 不可覆盖: 为不可覆盖虚拟方法,继承类不能覆盖本方法.

@嵌入式方法 文本型   方法 本属性只能应用于方法定义成员上,用作为指定当前方法为嵌入式方法.

本属性的值文本为属性表格式,该属性表可以具有以下属性:

1. name: 文本型,定义本嵌入式方法的标记名称,仅在所处类中使用并有效;
2. has_body: 逻辑型,默认值为假,指定本嵌入式方法的调用语句是否携带一个子语句体(用作封装类似Java的try之类具有子语句体的目标语言关键字);
3. prev: 文本型,如果不为空文本,指定本嵌入式方法的调用语句前方必须存在另一个嵌入式方法调用语句,该嵌入式方法必须与本嵌入式方法定义在同一个类中,其标记名称(前面的"name"属性定义)必须位于本属性值提供的标记名称列表内(多个标记名称之间使用逗号分隔);
4. next: 文本型,同"prev"属性,只不过是指定对后方嵌入式方法调用语句的需求.

嵌入式方法具有以下特点和需要注意的地方:

1. 嵌入式方法自动禁止流程检查;
2. 如果设置有"has_body"属性项或者提供了非空的"prev"/"next"属性值,则所应用到的嵌入式方法不能定义返回值;
3. 类_初始化 / 类_清理 / 属性写 / 事件定义接收方法 / 类虚拟方法均不能设置为嵌入式方法;
4. 嵌入式方法内只能存在嵌入文本语句,这些语句将与调用参数组合起来用作替换调用语句本身;
5. 方法的嵌入文本语句内访问除开嵌入式方法参数以外的其它任何成员时,必须明确指定类名前缀,且该类必须为公开类;
6. 方法的嵌入文本语句内始终只允许访问公开成员,哪怕该成员位于嵌入式方法本身所处的类/基础类中;
7. 方法的嵌入文本行语句内的"sn<current_class>"、"sn<base_class>"、"sn<current_package>"将基于调用该嵌入式方法的实际语句所处位置获取;
8. 方法的嵌入文本行语句内对所处方法的参数只允许最多引用一次;
9. 对嵌入式方法的调用将直接替换调用语句本身,编译器会根据需要自动在所生成的替换文本两侧加上左右小括号.

@禁止流程检查 逻辑型   方法 本属性只能应用于方法定义成员上,用作关闭编译器在该方法上的流程检查机制,主要包括以下内容:

1. 当方法定义有返回值时是否所有退出流程分支均返回了值

@默认值     参数 本属性只能应用于方法的参数定义成员上,用作为参数提供调用方未提供对应数据时的默认值,所设置数据必须与参数数据类型匹配.

当本属性应用到数据类型为数组/类/文本型的参数时,可以将属性值设置为"空对象".

@常量参数 逻辑型   参数 本属性只能应用于非嵌入式方法的参数定义成员上,设置为真说明该参数的内容在方法内部不可被修改.
@匹配类型 整数   参数 本属性只能应用于嵌入式方法的参数定义成员上,用作为参数匹配提供增强通配模式.
可以为以下选择项之一,用作指定其所对应的增强通配模式:

1. 通用整数型: 匹配所有非数组整数数据类型,如: 字节、短整数、字符、整数、长整数.
2. 通用数值型: 匹配所有非数组数值型数据类型,如: 字节、短整数、字符、整数、长整数、小数.
3. 通用基本型: 匹配所有非数组基本数据类型
4. 通用类: 匹配所有类定非数组义数据类型
5. 通用型: 匹配所有非数组数据类型
6. 通用整数型数组: 匹配所有整数数据类型数组,如: 字节、短整数、字符、整数、长整数.
7. 通用数值型数组: 匹配所有数值型数据类型数组,如: 字节、短整数、字符、整数、长整数、小数.
8. 通用基本型数组: 匹配所有基本数据类型数组
9. 通用类数组: 匹配所有类定义数据类型数组
10. 通用型数组: 匹配所有数据类型数组
11. 所有类型: 匹配所有数组和非数组数据类型

注意: 此时不能为参数设置数据类型

@需求类型 整数   参数 本属性只能应用于嵌入式方法的参数定义成员上,用作为参数匹配提供参数数据需求类型.
可以为以下选择项之一:

1. 可写入变量: 调用方需要提供可以修改其内容(即排除掉类似常量参数等)的参数/变量作为参数值
2. 立即数或常量: 调用方需要提供立即数或常量作为参数值
3. 数据类型: 调用方需要提供数据类型名称作为参数值

@可扩展 逻辑型   参数 本属性只能应用于嵌入式方法的最后一个参数定义成员上,用作说明该参数在调用时可以被扩展.
@返回值类型 整数   参数 本属性只能应用于嵌入式方法的参数定义成员上,用作说明该方法的返回值数据类型为调用方法时所提供的本参数数据的当前实际数据类型.

注意:

1. 从参数数据所获得的数据类型被去除了数组定义部分,而代替由属性值来直接指定数组定义部分的维数;
2. 所处方法本身必须没有定义返回值数据类型;
3. 所处方法只能有一个参数定义有此属性.

注: 属性表特性列中凡是未标注"[允许多设置项]"的说明其在属性表中只能存在一个设置项,未标注"[允许后缀]"的说明其不允许使用后缀方式,未标注"[不允许常量]"的支持用外部常量对本属性进行赋值(否则只能使用立即数).

 

六. 安卓项目插件相关:

1.安卓项目插件定义的项目扩展属性表:

名称 数据类型 相关特性 应用场合 解释
@java.同步 逻辑型   方法 用作指定该方法支持在多线程中同步
@java.后缀文本 文本型   类或方法 本属性可以应用在类或方法定义成员上,用作在转换到Java代码后在成员名后添加一段指定文本,譬如可以为类定义成员添加类似"implements my_interface"文本以实现指定Java接口,为方法定义成员添加类似"throws"文本指定异常抛出列表等.
@java.导入 文本型 [允许多设置项] 包/类/方法

 

注意: 当应用在包定义成员上时,仅对该包定义成员自身有效,不包括程序内其它源文件中定义的同名包定义成员.

本属性用作声明所处包/类/方法编译时需要加入的相关java命名空间import导入语句,多个导入名称之间使用逗号或换行符分隔.
@java.外部源文件 文本型 [允许多设置项] 本属性用作提供所处包/类/方法正常执行所需求的外部源文件名.

注意:

1. 所提供java源文件中必须使用java的package语句指定所处包,编译器将自动创建该包所对应的目录并将此源文件拷贝进去,然后递交给java编译器一并编译;
2. 所提供java源文件的内容必须为UTF8文本格式.

@安卓.权限需求 文本型 [允许多设置项] 本属性用作声明所处包/类/方法正常执行所需求的安卓权限,多个权限之间使用逗号或者换行符分隔.如果权限名称未给定前缀,默认为"android.permission".
@安卓.系统需求 整数   本属性用作声明正常执行所需求的最小安卓系统API级别
@安卓.附加清单 文本型 [允许多设置项]   本属性用作声明所处包/类/方法正常执行所要加入到安卓程序"AndroidManifest.xml"清单文件中的XML数据.
  属性值为具体的欲加入XML数据文本,其中的XML结点分为两种: 独有结点和非独有结点. 独有结点在同层次结点中只能存在一个,而非独有结点则可以存在多个. 独有结点的名称必须以"@"字符开头,而非独有结点则不以此字符开头. 在输出最终XML结果文本时,独有结点名称前的"@"字符将被自动去除.
  譬如,"manifest"/"application"结点均应该为独有结点,应该分别以"@manifest"/"@application"来表达,而"activity"/"service"则为非独有结点,首部不用加上此字符.
  如果所提供XML文本中的独有结点在已有XML清单内容中已经存在,将不再新建结点而直接将其属性表合并进已有结点的属性表,否则将新建结点.
  在进行结点的属性表合并时,不允许覆盖已有属性值,除开以下例外:
    1. 继承类上所应用的XML内容可以覆盖其基础类上应用的XML内容;
    2. 方法中所应用的XML内容可以覆盖其所处类上应用的XML内容;
    3. 编译器建立的所有安卓程序部件(应用程序/窗口/服务/广播接收器)的XML内容可以被用户所覆盖.
  所提供XML文本中所有根结点的名称可以为以下几种方式之一,用作定位其下属XML数据在清单中的具体插入位置:
    1. 绝对结点路径: 以"\"字符开始和分隔的多个结点名称,表示为从根结点开始的结点路径;
    2. 相对结点路径: 与绝对结点路径相比,它不以"\"字符开始,为相对当前结点的路径;
    3. 当前结点特定名称: 为固定的"."文本,用作代表当前结点.
  注意:
    1. 除开尾结点,路径中的所有结点必须均为独有结点,以保证路径的唯一性;
    2. 路径中的结点如果尚不存在,将自动创建;
    3. "应用程序"/"窗口"/"服务"/"广播接收器"4个类及其所有继承类被称为安卓程序部件类,其对应到相应的安卓程序部件: 应用程序/窗口/服务/广播接收器.只有本属性所应用到成员的所处类(应用在类上则为该类,应用在方法上则为其所处类)为安卓程序部件类时,才会存在当前结点,此时当前结点即为对应的安卓程序部件在清单文件中的输出结点;
    4. 在所有安卓程序部件类及其内部被使用方法上应用的本属性内容将被一并添加到该安卓程序部件在清单文件中的输出结点上;
    5. 所有非根结点只能使用纯粹的名称,即不能包括路径,也不能使用当前结点特定名称;
    6. XML属性值两侧如果没有双引号将被自动添加.
  举例:
    添加manifest属性: <\@manifest android:installLocation="internalOnly" />
    添加application属性和子结点: <\@manifest\@application android:uiOptions="none"> <meta-data android:name="zoo" android:value="abc" /> </@application>
    添加当前结点的子结点: <meta-data android:name="zoo" android:value="abc" />
    添加当前结点的属性: <. android:enabled="true" />
    添加当前结点的属性和子结点: <. android:enabled="true"> <meta-data android:name="zoo" android:value="abc" /> </.>
@安卓.外部库 文本型 [允许多设置项] 本属性用作提供所处包/类/方法正常执行所需求的外部jar或so库文件名,多个文件名之间使用逗号或者换行符分隔.
强烈推荐所使用的jar外部库使用jdk 1.6版本编译(编译时source和target参数均给"1.6"),如果使用太高版本jdk编译,有可能会导致安卓APK打包工具无法识别从而导致打包失败.
系统对外部jar和so库文件按照不同的算法进行处理:

1. 如果是jar外部库,则直接将该库文件加入到项目外部库存放目录;

2. 如果是so外部库,系统将按照以下算法(也是系统所使用的标准安卓资源搜寻算法)寻找并加入该so库的其它CPU架构版本:

1. 如果该文件携带修饰符,则将在同一目录中搜寻加入具有其余种类修饰符的同名so文件. 修饰符文本必须放在文件后缀名的前面,与文件名之间使用减号分隔,如"test-armeabi-v7a.so".所允许的修饰符为"arm64-v8a"/"armeabi"/"armeabi-v7a"/"mips"/"mips64"/"x86"/"x86_64"之一,用作提供其所支持的CPU架构);

2. 如果该文件位于以以上修饰符作为名称的子目录中,则自动在上一层目录中名称为其余种类修饰符的子目录内搜寻加入同名so文件(这一算法与安卓系统本身的一致);

3. 如果以上条件都不满足,则仅将该so文件加入到项目外部库目录的"armeabi-v7a"子目录内.

@安卓.外部资源.属性动画

@安卓.外部资源.居间动画

@安卓.外部资源.颜色表

@安卓.外部资源.可绘制

@安卓.外部资源.菜单

@安卓.外部资源.原始数据

@安卓.外部资源.XML数据

@安卓.外部资源.值

文本型 [允许多设置项] 这些属性用作提供所处包/类/方法正常执行所需求的各类外部资源文件名,分别对应以下类型的安卓资源: "animator"、"anim"、"color"、"drawable"、"menu"、"raw"、"xml"、"values".

多个文件名之间使用逗号或者换行符分隔,这些文件将被自动整合到当前程序的对应资源目录位置.

关于系统对这些外部资源文件的搜寻方式,请参见AndroidResFile.
 

@安卓.值资源 文本型 [允许后缀] 类定义成员 本属性可以应用在数据类型为"可设置值资源"或其继承类的常量/变量上,用作提供该常量/变量在不同修饰符下的对应初始资源值.
本属性必须同时提供一个安卓组合修饰符作为属性名后缀,如:"@安卓.值资源.en",即指定本属性值为所处值资源常量在英文设备上的对应值.
@安卓.窗口.布局 文本型 [允许后缀]

[不允许常量]

类定义成员或成员变量 本属性可以应用在直接/间接基础类为"窗口"的类定义成员或者窗口类中类型为"窗口组件"的成员变量上(属性名后可以选择附加一个安卓修饰符文本后缀),用作记录相关的布局参数.
本属性可以携带一个安卓组合修饰符作为后缀,用作指定本布局应用到所指定的设备环境上.如:"@安卓.窗口.布局.en-sw720-hdpi",即指定本布局应用到最小宽度为720dp,高dpi的英文设备上.
属性值中提供的布局属性可以以一个'@'字符开头,表明该布局属性及其值将强制通过编译器的检查(用户此时将自行保证该布局属性及其值的正确性).
@安卓.窗口组件.布局配置 文本型 [不允许常量] 窗口组件类 本属性只能在直接/间接基础类为"窗口组件"的类定义成员上使用,用作提供其在安卓布局文件中的相关配置信息.

具体所支持的属性表格式如下:

native_class = xxx
[need_helper]
[hidden]

[add_child_disabled]
[category] = xxx
[self] / [child]
{
    attr
    {
        [hidden]
        [discard]
        name = xxx
        shown_name = xxx
        [desc] = xxx
        data_type = xxx
        [detail_type] = xxx
        [default_value] = xxx
        [min_value] = xxx
        [max_value] = xxx
        [item]
        {
            name = xxx
            shown_name = xxx
            [desc] = xxx
        }
        [item ...]
    }
    [attr ...]
}

以上属性中,被中括号括住属性的为可选属性,否则为必须提供的属性. 另外,"attr"属性必须定义在"self"或"child"属性内.

名称 数据类型 解释
native_class 文本型 用作提供本组件所对应的本地java类名,必须为有效英文全名称.
helper 文本型 如果不为空文本,标记需要匹配该标识符的 已登记到系统的辅助功能插件来支持本组件的设计/编译.
hidden (顶层) 逻辑型 标记本组件设计时为隐藏状态,仅设计器使用.
add_child_disabled 逻辑型 标记本组件即使为容器类型组件,也不允许在其中加入子组件.

本属性可以用在类似列表框这样的组件上.

category 文本型 提供本组件所处的分类,仅设计器使用.
icon 文本型 提供本组件图标的图片文件名,相对本配置信息所处火山源文件位于的目录,为空表示无.
图片文件要求如下: 格式为BMP,尺寸32x32像素,颜色深度24位,背景色洋红(红绿蓝分量值分别为255,0,255).
self   标记其中属性为组件自身使用的属性
child   标记其中属性为组件的直接子组件使用的属性
attr   标记一个新属性的定义开始
hidden (attr节中) 逻辑型 标记本属性设计时为隐藏状态,仅设计器使用.
discard 逻辑型 标记本属性已经被抛弃,被抛弃属性自动被隐藏,且在设计器/编译器输出时被自动去除.
name 文本型 本属性的名称,必须为有效英文全名称.
属性名中可以使用句点字符分隔命令空间与名称本身,如果未指定命名空间,则默认命名空间为"android"("style"/"class"/"id"名称除外).一个特例命令空间名称为"global",该命名空间表示为全局命名空间.
举例说明:
    指定命名空间: "my_app.attr_name" -> "my_app:attr_name";
    指定全局命名空间: "global.attr_name"-> "attr_name"
    使用默认命名空间: "attr_name" -> "android:attr_name"
    特例: "style" -> "style", "class" -> "class", "id" -> "id"
如果以'@'字符开头,表示后续名称文本为在辅助功能插件中有约定的名称,此时如果本组件指定了不需要辅助功能插件("need_helper"属性为假)或者在对应辅助功能插件中未定义此约定名称,将解析出错.注意实际所使用的名称将不包括首部的'@'字符.
shown_name 文本型 本属性的显示名称,仅设计器使用.
desc 文本型 本属性的描述文本,仅设计器使用.
data_type 可选项 可选项名称 数据类型 解释 定义本属性的数据类型
boolean 逻辑型  
int 整数型  
double 小数型  
string 文本型  
detail_type 可选项 可选项名称 适用数据类型 解释 定义本属性的细节类型,细节类型必须与属性的数据类型对应.
dim 小数型 位置/尺寸.单位DP.
font_size 字体尺寸.单位SP.
frac 百分比
color 文本型 颜色,格式为'#'字符后跟数个十六进制字符,所支持的格式如下:
  1. #RGB;
  2. #ARGB;
  3. #RRGGBB
  4. #AARRGGBB
其中'#'后的每个字母代表一个十六进制字符位置,'A'代表透明色;'R'代表红色;'G'代表绿色;'B'代表蓝色.
enum 枚举型,表示属性值为一系列可选文本项中的一项.
必须使用"item"为此类属性提供可选文本项列表.
flags 标记集,表示属性值为一系列可选文本项中一或多项的集合,多项标记文本之间使用'|'字符分隔.
必须使用"item"为此类属性提供可选文本项列表
drawable_res_file 可绘制资源文件名(可以是图片或对应类型xml文件名)
default_value 文本型 指定本属性在设计/编译时所使用的默认值
min_value 数值型 仅适用于整数型/小数型的属性,用作提供数值的最小和最大许可值,默认为无限制.
max_value 数值型
item   用作为本属性提供一个可选择文本项
注意: 项目名称可以为任何格式文本,系统不进行要求.

注: 属性表特性列中凡是未标注"[允许多设置项]"的说明其在属性表中只能存在一个设置项,未标注"[允许后缀]"的说明其不允许使用后缀方式,未标注"[不允许常量]"的支持用外部常量对本属性进行赋值(否则只能使用立即数).

2. 当前类如果为窗口类/窗口组件或其继承类,则系统自动为其导入以下本地类:

import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
 

 

 

--- 完 ---