代码之家  ›  专栏  ›  技术社区  ›  SuperFrog

Android force压缩带有jpg扩展的sqlite

  •  9
  • SuperFrog  · 技术社区  · 6 年前

    我在android应用程序中有一个老类,它复制预先生成的sqlite数据库。在Android 2.3之前,我们需要将sqlite扩展更改为一个不会被压缩的扩展(比如这个问题中的jpg)。 当我们在4.1之前停止对android的支持时,就不再需要它了。

    我想减小apk的大小,但我想避免更改数据库的文件名。是否有方法标记文件,以便在创建apk时将其压缩,尽管它具有jpg扩展名?

    2 回复  |  直到 6 年前
        1
  •  0
  •   bwt    6 年前

    哪些文件类型不压缩由 noCompress 属性:

    android {
    
        aaptOptions {
            noCompress "txt"
        }
    
        ....
    

    相应的aapt选项是 -0 以下内容:

    -0指定一个附加的扩展名,这些文件将不会 压缩存储在.apk中空字符串表示 压缩所有文件。

    不幸的是,你似乎可以 添加 将新文件类型添加到默认列表或完全禁用压缩,但不 去除 文件类型。

    所以我唯一能想到的解决办法就是在构建之后再做。例如,对于Linux/Cygwin zip unzip :

    提取文件:

    $ unzip my_app.apk assets/*.jpg
    Archive:  my_app.apk
     extracting: assets/some_file.jpg
    

    在apk中替换它(默认情况下,zip始终压缩):

    $ zip -r my_app.apk assets/*
    updating: assets/some_file.jpg (deflated 91%)
    

    重新调整apk( 之前 签名,因为我们使用了新的apksigner):

    $ zipalign 4 my_app.apk my_app_aligned.apk
    

    签字:

    $ apksigner sign --ks my_keystore.keystore -v -out my_app_aligned_signed.apk.apk my_app_aligned.apk
    Keystore password for signer #1:
    **********
    Signed
    
        2
  •  0
  •   halfer    6 年前

    而不是避免正确更改文件名后缀 jpg db 也许更好的是看看旧的一个后缀文件是否仍然存在于设备上,然后在打开它之前相应地重命名它,这样以前版本的数据库将无缝地迁移(并且,也能够在正确的处理程序上在计算机上打开)。仅仅更改文件名将导致健忘症,因为一个不可访问的数据库文件。

    aaptOptions {noCompress "db"} 可能是选项,但很可能这不是必需的,除非文件的内容会被破坏(通常首选较小的包大小)。