出于安全原因,我需要在没有源代码的情况下导出库项目。不幸的是,库项目中生成的 jar 文件不包含资源。我不能指望这个图书馆的用户处理图书馆需要的任何资源。
有与此类似的帖子,但我还没有看到解决方案。
出于安全原因,我需要在没有源代码的情况下导出库项目。不幸的是,库项目中生成的 jar 文件不包含资源。我不能指望这个图书馆的用户处理图书馆需要的任何资源。
有与此类似的帖子,但我还没有看到解决方案。
以下配方曾经有效,尽管我最近没有尝试过:
第 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 年阅读此问题,请务必检查是否有更好的选择。
我听说过的一个想法是使用一个常规库项目并引用一个 Jar 文件,您可以在其中放置所有专有代码。所有资产都需要在您的库项目中,并且可以由您的库的用户读取。请记住,任何使用apktool的人都可以从最终的 APK 中提取这些文件。
但是,JAR 中的代码将不可读,并且您的用户需要对它们进行逆向工程,这可能很困难,尤其是在您对其进行混淆的情况下。