火山代码转java源代码查看

avatar 2019年5月30日17:49:56 评论 1,081

今天我们来研究一下火山安卓的源代码,火山安卓允许我们以本地化编程(中文代码编程)的方式来撰写安卓app,那么在生成实际要安装到安卓app的时候,它是如何进行编译处理的呢。让我们今天来一起探究一下。

首先我们编写一个app内容,这个app由编辑框和按钮组成的窗口,我们要实现的是点击该按钮,就会弹出一个信息提示框,而这个信息提示框提示的内容就与编辑框中的内容一致。实现的效果类似这样:

火山代码转java源代码查看

这很好实现,我就不贴窗口设计图了,大家不明白如何设计该窗口的可以看下我的源码即可,贴一下实现的源码:

火山代码转java源代码查看

接下来我们来看一下生成的目录中(前提是已经进行过调试或者生成发行版了),能否找到对应的文件。

首先告知大家,我们的解决方案保存在E:\voldevproject\xueshanlinghu_learn_voldev180路径下。

火山代码转java源代码查看

可以看到除了解决方案文件之外有几个项目文件夹,这些文件夹存放的都是该项目的火山源码文件、项目自己的资源等,方便管理。同时,如果你曾经调试过或者编译过发布版本的话,会看到一个_int的文件夹。我们可以双击打开该文件夹。

火山代码转java源代码查看

里面是按照每个项目单独建立文件夹的。我们点击今天研究的项目的文件夹javacode_day4进入。

火山代码转java源代码查看

可以看到一个“debug”文件夹,这个文件夹是通过“调试”功能生成的,生成的相关文件都存在里面,如果你曾经生成过发布版,则这里还能找到一个“release”文件夹,这里面存放的就是发布版本。

再往下进去一层目录,大家的目录结构就基本一样了,我就不截图了,大家自己进去看。

那么我们编写的源码放在哪里呢,我们可以在如下目录结构找到我们今天项目从火山源码转换成java源码后编译前的源码:E:\voldevproject\xueshanlinghu_learn_voldev180\_int\javacode_day4\debug\project\src\xshlh\xhsh\day4\hshdmzhjavaydmchk\rg_qdl.java

顺带一提,编译好的apk文件保存在如下路径下:E:\voldevproject\xueshanlinghu_learn_voldev180\_int\javacode_day4\debug\linker

再说回来,上述路径一直到src的层级是大家可以借鉴的,中间的\xshlh\xhsh\day4\hshdmzhjavaydmchk\部分,是我们这个项目特有的,大家看一下像什么?是不是很像拼音?其实就是包名的拼音声母组合的文件夹层级。

我们来看一下我们的包名是什么,我们这个项目的包名是:雪山凌狐.学火山.day4.火山代码转java源代码查看 。大家看一下“雪山凌狐”翻译成拼音是不是就是“xshlh”?请注意这里它有一个处理特殊点,就是翘舌的字用的拼音是sh,也就是声母,而不是用首字母s,所以我们的目录层级是包名的拼音声母组合。

我们知道在火山安卓中,当包名相同的时候,安装到安卓程序就会被视为同一个程序,所以我们的包名尽可能长一些特有一些就不容易重复。火山这种方式,我们发现可能存在着一个问题点,那就是如果是不同的汉字,包名我们在火山软件平台里面看起来当然不同,但是声母相同,在安装生成的时候,会不会变成相当于同一个程序呢?下节课我们来一起研究一下这个问题。如果是,其实建议火山平台今后的版本还需要在用户自己设置的包名基础上,加上随机字符之类的避免包名相同吧(或其他更高级的办法)。

后面的rg_qdl.java 就是源文件啦,可以看到是一个java文件咯。

因此我们可以知道,火山的编译器相当于一个翻译器,编写后的中文代码,使用火山自带的编译器会转换成对应的java源代码,然后通过这些代码进行编译,最后生成我们的apk文件供安卓系统安装。

 

接下来我们打开一下该java源文件看一下能不能看懂,同时我再贴一遍火山源码:

火山代码转java源代码查看

 

package xshlh.xhsh.day4.hshdmzhjavaydmchk;

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

public class rg_qdl extends hsh.anzh.jb.rg_chk {

    public rg_qdl ()  { }

    protected hsh.anzh.jb.rg_bjk rg_n14433;
    protected hsh.anzh.jb.rg_ann rg_n14434;

    protected hsh.anzh.jb.rg_xxbjq rp_1;
    @Override public hsh.anzh.jb.AndroidViewGroup GetAndroidActivityContainer () {
        return rp_1;
    }

    @Override
    protected boolean onInitAndroidActivity () {
        if (super.onInitAndroidActivity () == false)
            return false;

        setContentView (R.layout.rg_qdl);
        rp_1 = new hsh.anzh.jb.rg_xxbjq (this, (LinearLayout)findViewById (R.id.rg_qdl));
        rp_1.onInitControlContent (this, null);

        rg_n14433 = new hsh.anzh.jb.rg_bjk (this, (EditText)findViewById (R.id.rg_n14433));
        rg_n14433.onInitControlContent (this, null);
        rg_n14434 = new hsh.anzh.jb.rg_ann (this, (Button)findViewById (R.id.rg_n14434));
        rg_n14434.onInitControlContent (this, null);
        rg_n14434.rl_AndroidView_n3017 (new hsh.anzh.jb.AndroidView.re_n3017 () {
            public int dispatch (hsh.anzh.jb.AndroidView objSource, int nTagNumber) {
                return rg_n14435 ((hsh.anzh.jb.rg_ann)objSource, nTagNumber);
            }
        }, 0);
        return true;
    }

    protected int rg_n14435 (hsh.anzh.jb.rg_ann rg_n14436, int rg_n14437) {
        if (rg_n14436 == rg_n14434)
        {
            rg_n15040 (String.valueOf (rg_n14433.GetTextView ().getText ()));
        }
        return (0);
    }
}

 

分析以上源码,我们可以首先知道这是一个包(package),然后里面的包名你还是很明显看出是声母组合的翻译。接下来就是一些引用和翻译,看不懂没关系,咱们来看最后的这部分吧:

火山代码转java源代码查看

最后的这部分,可以看到有if语句,很明显不就是我们按钮_被单击事件方法中的内容吗?

有的同学会问,比如rg_n14436是啥啊,完全看不懂,其实这是对应“来源对象”的id,而同理rg_n14434就代表着该程序的那个按钮的id。通过id可以唯一访问资源,对程序进行控制。那么在哪定义这些id的呢,其实我估计应该是随机生成的,然后对应关系是保存在其他文件夹的其他java源码当中,大家可以自己去探索,我们就不看了。

可以看到,与我们中文代码逻辑一致,判断来源对象是否等于该按钮,如果是的话,就调用提示信息框的方法,对应id应该是看到的rg_n15040。去获取编辑框rg_n14433的内容,用的是getText()方法。

 

是不是很有趣?其实这也是学习对应java语句的挺好的办法,虽然你不一定懂,但能对照着中文代码去阅读,是不是感觉理解了许多?欢迎大家继续多写几段火山代码,然后再看看转换成java源代码后是如何实现的。

 

 

最后附上咱们的源码下载地址:

内容已经隐藏,请注册为本站会员后查看
avatar

发表评论

您必须才能发表评论!