当前位置: 首页 > 知识库问答 >
问题:

在apk中保留“meta-inf/services”-文件

申屠飞
2023-03-14

我的CharsetProvider的类是在文件java.nio.charset.spi.CharsetProvider中指定的,该文件位于Meta-INF/Services中,所有GET都正常加载并按预期工作。

然而,现在我也在android上使用lib,但是charset没有加载到android-app中。

我如何整合我的字符集,使它可以像预期的那样在一个Android应用程序中使用?

Charset.forName("MyCS");

目前我正在做这样的变通:

public static String decode(String encoding, byte[] buffer, int offset, int length) {
    String result = "";
    try {
        result = new String(buffer, offset, length, encoding);
    } catch (UnsupportedEncodingException ex) {
        MyCharsetProvider provider = new MyCharsetProvider();
        Charset cs = provider.charsetForName(encoding);
        if (cs == null) {
            Logger.getLogger(Converters.class.getName()).log(
                    Level.SEVERE,null,ex);
            result = new String(buffer, offset, length);
        } else {
            result = cs.decode(ByteBuffer.wrap(buffer, offset, length)).toString();
        }
    }
    return result;
}

这是可行的,但在我看来是无效的,因为每次我尝试用自己的charset进行这样的解码时,都会抛出一个异常并创建一个CharsetProvider-Object。

当然,单例模式可以减少创建。但问题是完全避免直接使用MyCharsetProvider。

-adaptresourcefilenames **.CharsetProvider
-adaptresourcefilecontents **.CharsetProvider

但问题依然存在。那么,如何使用ant(netbeans)自动将meta-inf/services中的这些文件获取到我的apk中呢?

共有1个答案

孙阳旭
2023-03-14

蚂蚁

我现在使用的是以下解决方案:

我创建了一个带有followin目标的custom_rules.xml,将meta-inf/services中的文件复制到未对齐和未签名的APK中。

<target name="-post-package" depends="-custom-copy" />

<target name="-copy-custom">
    <zip destfile="${out.packaged.file}"
         update="true"
         basedir="${source.absolute.dir}"
         includes="${custom.copy}" />
</target>
custom.copy=META-INF/services/**

Eclipse-插件

使用eclipse-plugin,没有像Ant那样的变通方法。问题是ExportHelper(第405行),它只是在meta-inf文件夹中获取所有内容。

Android-Studio/Gradle

 类似资料:
  • 有没有一种方法可以用Maven在Meta-INF/services中创建自定义服务文件?这就是您使用Ant的方法:https://ant.apache.org/manual/tasks/jar.html 我知道在我的源代码中创建一个resources/meta-inf/并放置我想要的任何服务文件是可能的。然后,Maven会自动将这些文件拉到我的JAR中。这不能解决我的问题。 在我的源代码中有多个版

  • 错误:任务“:OpenPayAndroid:TransformResourcesWithMergeJavaResforRelease”执行失败。 com.android.build.api.transform.transformException:com.android.builder.packaging.duplicateFileException:APK Meta-INF/license文件中

  • 因此,在我的主程序中,我运行以下内容。 它总是返回false,这意味着它没有找到'dummydevice' 在我的eclipse项目中,我在'src'处创建了一个名为META-INF的文件夹,在它下面创建了一个名为'services'的子文件夹。 我做对了吗?我看到的每一个关于SPI的例子都是关于加载JAR的。我不是在加载一个JAR,我是想在同一个项目中运行一个类。这个方法只适用于装入罐子吗?我希

  • 我将使用Spring向我的Android应用程序添加RESTful Web服务支持,如下所述https://Spring.io/guides/gs/consulting-rest-android/。 这是顶级构建。gradle配置: 我做错了什么,怎么修复?

  • 问题内容: 将Studio从0.3.7更新到0.4.0后,无法编译项目。我找到了一个解决方案:复制了重复的文件(Android Studio 0.4.0) 我将项目更新为gradle0.7。+,但是我不知道接下来的字符串应该放在哪里: 我的logcat:日志 PS开发在Ubuntu 13.04中 问题答案: 将依赖项放在顶部,将放在末尾对我有用。 这是我在app文件夹中的完整。 编辑:几乎所有的O

  • 问题内容: 我在一个商业android应用程序上工作。我还使用了一些使用不同许可类型许可的库,其中一些声明如下: 如果库中有带有归因说明的“ NOTICE”文件,则在分发时必须包括该NOTICE (例如,其中之一已获得 Apache License 2.0 的 许可 )。 有多个库。使用 gradle 或 Android Studio 进行构建时,出现以下构建错误: 到目前为止,我在Interne