如何为 android 创建包含本机代码和纯 java 的库
How to make a library containing native code and pure java for android
我已经针对 android 的不同架构交叉编译了本机代码,并在 android studio 中使用了相应的 jni 包装器 class。现在我想把它作为一个图书馆提供。我有两个问题:
1)我可以直接将 .so 文件和 jni 文件打包成库吗?(不是 .aar 因为我的库只包含纯 java 和本机代码,没有 android 相关诸如 .xml、res 等之类的东西)如果是这样,它的结构应该是什么?
2) 如果我无法创建 .jar 文件,那么我只剩下创建 .aar 文件了。这将包括使用 android 工作室。没有 android 工作室我可以做吗?
编辑 1:
如果我 jar 文件,那么我不想提取 .so 然后使用它。如果我 jar 文件,然后将它(.jar)添加为我项目中的依赖项,那么它应该自动将 .so 放入我的 apk 中的 libs/jni 文件夹中,以便 jni 可以找到它。问题是我该怎么做?(如果可能的话)
幸好找到了方法。因为 .aar 本身是一个简单的 zip 文件,具有指定的结构 here。我所做的是 "jar" 所有 .class 文件(在正确的包文件夹内)到 classes.jar,创建一个空文件夹 "res",将所有 .so 文件放在 jni 文件夹中(具有适当的体系结构)并制作了一个包含基本标签的简单 AndroidManifest.xml。然后我将它们打包到扩展名为 .aar 的文件中(如 mylib.aar)。我已经通过将 .aar 复制到另一个项目的 libs 文件夹并在应用程序的 build.gradle
(如 compile(name:'mylib',ext:'aar')
)中添加对它的依赖来测试它。而且效果很好。
我已经针对 android 的不同架构交叉编译了本机代码,并在 android studio 中使用了相应的 jni 包装器 class。现在我想把它作为一个图书馆提供。我有两个问题:
1)我可以直接将 .so 文件和 jni 文件打包成库吗?(不是 .aar 因为我的库只包含纯 java 和本机代码,没有 android 相关诸如 .xml、res 等之类的东西)如果是这样,它的结构应该是什么?
2) 如果我无法创建 .jar 文件,那么我只剩下创建 .aar 文件了。这将包括使用 android 工作室。没有 android 工作室我可以做吗?
编辑 1: 如果我 jar 文件,那么我不想提取 .so 然后使用它。如果我 jar 文件,然后将它(.jar)添加为我项目中的依赖项,那么它应该自动将 .so 放入我的 apk 中的 libs/jni 文件夹中,以便 jni 可以找到它。问题是我该怎么做?(如果可能的话)
幸好找到了方法。因为 .aar 本身是一个简单的 zip 文件,具有指定的结构 here。我所做的是 "jar" 所有 .class 文件(在正确的包文件夹内)到 classes.jar,创建一个空文件夹 "res",将所有 .so 文件放在 jni 文件夹中(具有适当的体系结构)并制作了一个包含基本标签的简单 AndroidManifest.xml。然后我将它们打包到扩展名为 .aar 的文件中(如 mylib.aar)。我已经通过将 .aar 复制到另一个项目的 libs 文件夹并在应用程序的 build.gradle
(如 compile(name:'mylib',ext:'aar')
)中添加对它的依赖来测试它。而且效果很好。