3

出于安全原因,我需要在没有源代码的情况下导出库项目。不幸的是,库项目中生成的 jar 文件不包含资源。我不能指望这个图书馆的用户处理图书馆需要的任何资源。

有与此类似的帖子,但我还没有看到解决方案。

4

2 回答 2

8

以下配方曾经有效,尽管我最近没有尝试过:

第 1 步:让库项目按原样工作。我将保存这个项目的目录称为$ORIG.

第 2 步:如果您还没有这样做,请$ORIG使用android update project.

步骤#3:添加一个$ORIG/build.xml创建 JAR 文件的任务,例如:

<target name="jar" depends="debug">
  <jar
      destfile="bin/YOUR-LIBRARY-NAME-GOES-HERE.jar"
      basedir="bin/classes"
  />
</target>

第 4 步:将整个库项目从另一个目录复制$ORIG到另一个目录,我将其命名为$DIST.

步骤#5:除去根目录本身之外src/的树。$DIST src/

第 6 步:bin/YOUR-LIBRARY-NAME-GOES-HERE.jar进入$DIST/libs/. 这有效地将您的源代码替换为src/已编译的等效代码。

步骤#7:摆脱它,$DIST/bin/因为它不再需要。

$DIST现在拥有一个相当于 的 Android 库项目$ORIG,只是src/树被替换为libs/YOUR-LIBRARY-NAME-GOES-HERE.jar.

由于 SDK 管理器中的 Google Play 服务包是以这种方式打包的,因此我不仅认为该方法仍然有效,而且似乎得到了官方的合理认可。

请注意,正在开发的新构建系统可能会为我们提供更多选择。如果您在 2014 年阅读此问题,请务必检查是否有更好的选择。

于 2012-12-28T21:17:01.403 回答
0

我听说过的一个想法是使用一个常规库项目并引用一个 Jar 文件,您可以在其中放置所有专有代码。所有资产都需要在您的库项目中,并且可以由您的库的用户读取。请记住,任何使用apktool的人都可以从最终的 APK 中提取这些文件。

但是,JAR 中的代码将不可读,并且您的用户需要对它们进行逆向工程,这可能很困难,尤其是在您对其进行混淆的情况下。

于 2012-12-28T21:11:42.250 回答