linux上怎么把一堆ruby脚本打包成一个可执行文件

Python07

linux上怎么把一堆ruby脚本打包成一个可执行文件,第1张

may be you can paste this to your ~/.bashrc file ,

alias exemyfile="ruby myrubyfile.rb"

then enter exemyfile command in your terminal, it works as you want.

步骤1:注册ApkPlug官网账号:

打开Apkplug官网后,点击右上角的“注册”,在跳转页面填入相关信息,注册界面如下:

确认后注册成功,使用你的账号登录网站。你就可以用Apkplug开发应用了

END

步骤2:开发插件

Apkplug中的插件也是一个完整的apk,它与普通应用的区别有以下3点:

1, 插件assets目录下有一个plugin.xml文档,通过它可判断一个工程是主应用还是插件。

2, 插件有一个入口类BundleActivator

3, 插件会外部引用一个osgi.jar文件

开发插件的步骤有如下4步:

1,引入osgi.jar库文件

Apkplug中插件需要导入的库文件只有一个osgi.jar。

导入osgi.jar库文件需要注意一下

osgi.jar文件只能引用不能编译到apk文件中,否则会出现类冲突的情况

异常代码:had used a different Lorg/osgi/framework/BundleActivatorduring pre-verification。

osgi.jar包导入方法:

这文件在Apkplug SDK中可以找到。

2,编写插件入口类BundleActivator

插件启动时首先调用BundleActivator,其功能类似android中的application类。

public class SimpleBundle implements BundleActivator

{

private BundleContext mcontext = null

public void start(BundleContext context) throws Exception

{

System.err.println("你好我是插件,我将为你展示启动acitivty我已经启动了 我的BundleId为:"+context.getBundle().getBundleId())

}

public void stop(BundleContext context)

{

System.err.println("你好我是插件,我被停止了 我的BundleId为:"+context.getBundle().getBundleId())

}

}

3,编写plugin.xml配置文件

plugin.xml

是一个配置表,它跟AndroidManifest.xml作用类似。 plugin.xml文档放置在assets中即可 重要属性说明:

Bundle-Name插件名称 Bundle-SymbolicName 插件包名

-与应用packagename可一一对应 Bundle-Version 插件版本 -1.0.0

Bundle-Activator插件入口 -与Appliction 类似

Bundle-Activity 插件界面 -多个Activity可用 , 分割

Bundle-Service 插件Service -多个Service可用 , 分割

(v2.0.0新增) Bundle-Receiver 插件广播-多个广播类可用 , 分割

(v2.0.0新增)

4, 编译生成插件apk文件

插件工程中添加的文件目录结构如下:

最后编译运行插件工程,生成的apk文件即为插件文件

END

步骤3:开发主应用

Apkplug 主应用开发分两步集成:

1. 获取主应用授权AppAuth。

登录账号进入Apkplug后台后,切换到“应用授权页面”,按要求填写好应用信息,然后确定,你就拥有了一个等待开发的应用授权AppAuth。应用授权界面如下:

进入“授权列表”页面,点击“查看详情”链接,进入“应用详情界面”,就可以看到已申请的AppAuth,点击其后面的“复制”,即可直接复制AppAuth,如下图所示

2. 对接Apkplug SDK 导入相关库文件。

①配置应用权限

主应用需要几个基础的权限配置,请将以下的几个权限加入到主应用的AndroidManifest.xml中。

<!-- 插件平台需要的权限! -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE">

</uses-permission>

另外将一下加入到<application></application>节点中

<!-- 插件平台需要的配置! -->

<activity

android:name="org.apkplug.app.apkplugActivity"

android:theme="@style/android:Theme.Light"

android:configChanges="orientation|keyboardHidden"

/>

最后将我们从Apkplug管理后台申请到的AppAuth加入到配置文件中。

<meta-data android:name="apkplug-auth" android:value="xxxxxxxx" ></meta-data>

注:由于3.2.2节中我们直接复制了AppAuth,此处直接粘贴到AndroidManifest文档中。

如下图:

②导入SDK库文件

主应用需要导入两个文件,将其放入libs目录中即可。

1, libndkfoo.so

2, Bundle2.0.0.jar

如下图:

这两个库文件在Apkplug SDK中可以找到。

然后:

主应用启动Apkplug最简只需要一段代码即可,建议在Application中启动框架。

FrameworkInstance frame=FrameworkFactory.getInstance().start(List<BundleActivator>,Context)

将上一步骤开发好的插件apk,放置在主应用工程里的assets路径下。

如下图:

END

步骤4:启动主应用

最后启动主应用即可。简单的插件化apk的方法就讲完了,有兴趣的关注我,下次讲云端托管插件实现应用内更新。

apk 是Android Package的简写, 在平时的开发过程中,通过点击 Run app 按钮 或者 在命令行中输入

这样Android Studio就会启动构建流程,最终输出一个我们想要的APK。

直达官网介绍

对于小白来说,上面一张图已经可以解释apk的构建过程了,不过对于Andoid开发者而言还需要了解一些更详细的构建过程。

详细的对应步骤 和 使用工具如下:

资源文件(res文件夹下的文件)通过 AAPT(Android Asset Packaging Tool)打包生成R.java类(资源索引表)、.arsc资源文件 和res文件。

resources.arsc 是一个App的资源索引表,通过R.java 文件 和 resources.arsc 可以定位到资源的内存地址,resources.arsc文件的作用是通过一样的ID,根据不同的配置索引到最佳的资源显示在UI中。

AIDL (Android Interface Definition Language), 是Android接口定义语言,是Android提供的IPC (Inter Process Communication,进程间通信)的一种独特实现。

如果有aidl文件,这个阶段会生成对应的Java接口文件。

R.java文件、工程源码文件、aidl.java文件, 在这一步通过javac生成.class文件。

源码.class文件和第三方jar或者library通过dx工具打包成dex文件

Android系统的Dalvik虚拟机的可执行文件为DEX格式,所以这里会将上一步中生成的.class文件 和 引用的第三方jar等过程中的.class 一起通过dx工具打包成dex文件

apkbuilder工具会将所有没有编译的资源、.arsc资源、.dex文件打包到一个完成apk文件中

tips:

apksigner工具会对未签名的apk验证签名。得到一个签名后的apk(signed.apk)

apksigner 是google 退出的V2签名方式

Jarsigner 是之前一直使用的V1签名方式

可以通过在命令行中输入apksigner --help来获取详情信息,如果没有特殊需求,使用下面命令即可完成签名

release mode 下使用 aipalign进行align,即对签名后的apk进行对齐处理

所谓对齐,主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用主要是为了减少运行时内存的使用。

zipalign是一个android平台上整理APK文件的工具,它对apk中未压缩的数据进行4字节对齐,对齐后就可以使用mmap函数读取文件,可以像读取内存一样对普通文件进行操作。如果没有4字节对齐,就必须显式的读取,这样比较缓慢并且会耗费额外的内存。

参考文章:

Android-Studio配置构建

浅谈Android打包流程

apk打包流程

END!