【问题标题】:How to make a library containing native code and pure java for android如何为android制作一个包含本机代码和纯java的库
【发布时间】:2016-06-30 18:57:10
【问题描述】:

我已经为 android 的不同架构交叉编译了本机代码,并使其相应的 jni 包装类在 android studio 中工作。现在我想把它作为一个库提供。我有两个问题:

1)我可以只 jar .so 文件和 jni 文件来制作库吗?(不是 .aar,因为我的库只包含纯 java 和本机代码,没有 .xml、res 等 android 相关的东西)如果是这样,它的结构应该是什么?

2) 如果我无法创建 .jar 文件,那么剩下的就是创建 .aar 文件。这将包括使用 android studio。没有android studio可以吗?

编辑 1: 如果我 jar 文件,那么我不想提取 .so 然后使用它。如果我 jar 文件,然后将它(.jar)作为依赖项添加到我的项目中,那么它应该自动将 .so 放入我的 apk 中的 libs/jni 文件夹中,以便 jni 可以找到它。问题是我该怎么做?(如果可能的话)

【问题讨论】:

  • 我相信您应该能够将 .so 文件和 Java 文件添加到库中。但是,为了能够使用 jar 中的 .so 文件,您需要将其解压缩到设备上的某个位置以加载库。我尚未对其进行测试,但如果我有机会确保它有效,我会发布答案。
  • 你在说这个adamheinrich.com/blog/2012/12/… 吗?我不想那样做。如果我 jar 文件,然后将其作为依赖项添加到我的项目中,那么它应该自动将 .so 放入库中,以便 jni 可以找到它。

标签: android android-ndk java-native-interface android-library native-code


【解决方案1】:

幸运的是找到了方法。因为 .aar 本身就是一个简单的 zip 文件,其结构指定为 here。我所做的是将所有.class文件(在正确的包文件夹中)“jar”到classes.jar中,创建一个空文件夹“res”,将所有.so文件放在jni文件夹中(具有正确的架构)并制作一个简单的AndroidManifest。 xml 包含基本标签。然后我将它们放入扩展名为 .aar 的文件中(如 mylib.aar)。我已经通过将 .aar 复制到另一个项目的 libs 文件夹并将其依赖于应用程序的build.gradle(如compile(name:'mylib',ext:'aar'))来测试它。而且效果很好。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2012-12-26
    • 2013-06-18
    • 2012-11-18
    相关资源
    最近更新 更多