这已经被讨论过几次,成功的状态各不相同,但我能找到的大多数答案都是几年前的事了。
本质上,我有一个应用程序已经转移到不与客户共享的地步。客户希望扩展应用程序,但我们不希望他们访问原始代码——在所有这些上保护 IP。
布局、图像等......好吧,我们不太关心这些,只关心java代码。我可以轻松地将 java 代码编译成 jar 并分发它,但这只是答案的一半。java代码仍然引用了一大堆内部资源。
我正在使用的场景是 jar 文件包含以下内容:
在 Jar 文件中 - MyActivity 扩展 Activity - MyActivity 中的 onCreate() 将 contentView 设置为 jar 文件中的 R 引用布局。
在客户端应用程序中 - MyClientActivity 扩展 MyActivity
当它运行时,我在 MyClientActivity 上得到一个 ClassNotFoundException。
我注意到的事情: - 如果我将 jar 代码作为库而不是 jar 文件附加,它可以工作。- 如果我在 MyActivity 的 onCreate() 中删除 R 引用并重新制作我的 jar 文件,它就可以工作。
因此,显然,如前所述,R 引用是死的/不可访问的。问题是,这显然可以工作,不是吗?如果您创建一个 Android 应用程序并查看自动包含的 API,则 android.jar 文件有一个 R 文件,其中包含内部布局/字符串/等...,这些都是从其代码中引用的。
正如其他人之前所说,这似乎是一种非常基本且明显的使用模式。它看似不起作用的事实令人难以置信,以至于让人相信它确实起作用,只是没有以明显的方式完成。
有没有人真正让它工作?
非常感谢,
-绳索