小编Eri*_*ami的帖子

在APK打包之前运行已编译的Java代码

我的应用程序显示了从APK中包含的静态XML文件创建的项目列表。为了加快速度,我的应用在首次加载时会缓存数据的二进制版本。该应用程序在读取缓存的二进制数据而不是XML时,启动速度提高了约300毫秒。

您可以猜测会发生什么:在构建应用程序时,我想预先计算二进制版本并将其粘贴到assets目录中。我想保留XML加载器,因为用户可以选择其他XML文件并在应用程序中显示它们。因此,我不想将加载程序移入buildSrc,也不想通过构建单独的项目来依赖构建脚本和应用程序的工作。

我已经获得了让我的缓存代码作为一个单独的目标运行的特权,但是我不知道要声明一个Android构建任务以doLast使其在常规构建期间发生。

我应该声明对哪个任务的依赖关系,以便在构建运行时就生成该依赖关系?我试过preBuildpackageDebugpackageRelease

task writeBinary() {
    doFirst {
        print("Writing binary file")
        javaexec {
            classpath += files("build/intermediates/classes/debug")
            classpath += files("build_libs/xpp3-1.1.4c.jar")
            main = "ehues.tome.loader.BinaryReaderWriter"
            args = ['src/main/assets/standard/my.xml', 'src/main/assets/standard/my.bin']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio android-gradle-plugin

7
推荐指数
1
解决办法
131
查看次数

如何找到TCP套接字的索引节点?

如何将“ inode”列中的值绑定/proc/net/tcp到中的文件/proc/<pid>/fd/

我的印象是,inodeTCP 中的列具有套接字的inode的十进制表示形式,但事实并非如此。

例如,如果我运行,则会telnet localhost 80看到以下内容(telnet为pid 9021)。

/proc/net/tcp 包含

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
23: 0100007F:CE2A 0100007F:0050 01 00000000:00000000 00:00000000 00000000  1000        0 361556 1 00000000 20 0 0 10 -1
Run Code Online (Sandbox Code Playgroud)

这让我认为连接到127.0.0.1:80的套接字的inode是361556。但是如果我运行ls --inode -alh /proc/9021/fd,我会看到

349886 lrwx------ 1 me me 64 Dec 26 10:51 3 -> socket:[361556]
Run Code Online (Sandbox Code Playgroud)

索引节点为349886,与tcp表的索引节点列中的值不同:361556。但是链接目标似乎具有正确的名称。同样,stat /proc/9021/3显示:

File: ‘/proc/9021/fd/3’ -> ‘socket:[361556]’
Size: 64            Blocks: 0          IO Block: 1024 …
Run Code Online (Sandbox Code Playgroud)

sockets linux tcp proc

4
推荐指数
1
解决办法
5611
查看次数