出于安全原因,我需要导出没有源代码的库项目。不幸的是,库项目中生成的jar文件不包含资源。我不能指望这个库的用户可以处理库所需的任何资源。
这个帖子有类似的帖子,但我还没有看到解决方案。
答案 0 :(得分:8)
以下配方曾经有用过,虽然我最近没有尝试过:
步骤1:让图书馆项目按原样运行。我将把这个项目的目录称为$ORIG
。
步骤2:如果您还没有这样做,请使用$ORIG
在android update project
中创建Ant构建脚本。
步骤3:向创建JAR文件的$ORIG/build.xml
添加任务,如:
<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
现在拥有一个相当于$ORIG
的Android库项目,但src/
树已替换为libs/YOUR-LIBRARY-NAME-GOES-HERE.jar
。
由于SDK管理器中的Google Play服务包是以这种方式打包的,因此我不仅假设配方仍然有效,而且看起来似乎得到了合理的正式认可。
请注意,工作中有新的构建系统可能会为我们提供更多选项。如果您正在阅读2014年的问题,请务必检查是否有更好的选择。
答案 1 :(得分:0)
我听说过的一个想法是使用一个常规的Library项目,引用一个Jar文件,这是你放置所有专有代码的地方。所有资产都需要在您的库项目中,并且您的库的用户可以读取这些资产。 请注意,apktool的任何人都可以从最终的APK中提取这些文件。
但是,JAR中的代码不可读,并且您的用户需要对它们进行反向工程,这可能很困难,尤其是如果您对其进行模糊处理。