Android 库项目作为 jar 文件进行分发,例如 google Analytics

2024-03-05

我见过this https://stackoverflow.com/questions/5014128/create-an-android-jar-library-for-distribution问题,并且对创建一个我可以分发并可以在任何 Android 应用程序中使用的 jar 文件有更多疑问。

我的要求是什么

  1. 正如我所说,我想构建和分发一个闭源库。我 不希望源代码可见。
  2. 在那个库中我不想使用任何资产、布局、资源 等等,但我想使用一些android特定的代码,比如得到 安卓设备 ID。 https://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id

上面链接的SO问题中最受欢迎的答案告诉创建一个常规的java项目并在其中导入android.jar。我尝试这样做,但我不知道如何将 android.jar 添加到任何 java 项目中。我也想得到一些澄清。

此外我想知道是否有其他方法使用android sdk本身(不使用java项目)创建一个闭源库jar文件。

我认为我想要的是可能的,因为Android 原生应用的谷歌分析 https://developers.google.com/analytics/devguides/collection/android/似乎已经做到了。我确信在他们分发的 .jar 文件中,他们使用的是 Android 特定代码,因为他们似乎没有其他方法可以获取设备信息以在分析查看器中显示。

编辑:有人可以澄清一下吗?

我想我已经取得了一些进步。这就是我所做的

  • 创建了一个常规的 android 项目(不是库项目,“是 图书馆”复选标记未选中)

  • 在项目中我已经编写了我的逻辑。它使用一些android 具体课程如SharedPreference, UUID, PackageManager。但 与资产无关,布局也没有类扩展Activity。只是一个java类扩展java.lang.object

  • 使用导出项目项目->右键->导出->Java->JAR 文件。在下一个屏幕中,我取消选中附近的复选框AndroidManifest.xml。设置要导出的目标目录并 单击“下一步”三次,保留默认设置。然后我点击了 完成,得到了一个可爱的libMyLibraryName.jar在我的桌面上。

然后我创建了另一个android项目,添加了这个libMyLibraryName.jar到新项目使用项目->右键->属性->java构建路径->库->添加外部jar。

我尝试在图书馆的新项目中使用我的课程

MyLibraryClass objClass = new MyLibraryClass(this);

而且我能够成功编译并运行。我什至将库发送给我的一位同事,他能够在他的机器上使用该库(只需确保我工作区中的库项目不会影响使用它的项目)。

现在我有两个问题。

1)我的第一个问题是,下面给出的文档中术语“真正的库”是什么意思?是否有任何可以导出到 JAR 文件的非 android java 项目?

然而,一个图书馆项目与标准 Android 不同 应用程序项目,因为您无法将其直接编译为自己的项目 .apk 并在 Android 设备上运行它。同样,您不能导出 将库项目转换为独立的 JAR 文件,就像你会做的那样 为一个真正的图书馆。相反,您必须间接编译该库, 通过引用依赖应用程序中的库并构建 该应用程序。

那么这部分取自文档 http://developer.android.com/guide/developing/projects/index.html标题为“图书馆项目”。

2)我的第二个问题是,我创建 JAR 文件的方式有什么问题吗?有什么可能的陷阱会在以后咬我一口吗?在我的重要项目中使用它之前,我想确保我没有做一些非常错误的事情。

我补充一下,我没有尝试创建JAVA项目并导入的方法android.jar。如果我目前所做的事情是错误的,我准备尝试一下。


The android.jar将位于您安装 Android SDK 的位置。在下面platforms目录中应该还有许多其他名为android-<version>. The android.jar将在那里。选择特定于您目标的最低 Android 版本的版本。

完成后,将其复制到您的项目中。如果您使用的是 eclipse,我认为您可以直接将 jar 剪切并粘贴到您的项目中,右键单击并将其添加到构建路径。如果您不使用 eclipse 或任何其他 IDE,则只需在构建 jar 文件时确保 android.jar 位于类路径中。

之后,您新构建的 Android 库就可以放入任何 Android 项目中。

回答您的附加问题:

  1. 真正的库是指 jar 文件,而不是 Android 库项目。

  2. 我认为您创建 jar 文件的方式没有任何问题。我会用android.jar正如我上面提到的,但你的方法也应该有效。为了验证这一点,我会检查罐子里的东西,并确保里面有.class files.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 库项目作为 jar 文件进行分发,例如 google Analytics 的相关文章

随机推荐

  • Tensorflow Op:如何包含 libtensorflow_framework.so?

    我按照本教程的说明进行操作 https www tensorflow org extend adding an op implement the gradient in python https www tensorflow org ext
  • 如何使用 Prisma 2 和 NodeJS 将图像存储到 PostgreSQL 中?

    大家好 我一直在寻找类似的可以参考的东西 但遗憾的是直到现在我还没有找到 希望有人能给我一些指导 我使用 filepond 发送 api 请求 并使用 prisma 2 客户端存储它 谢谢你 将图像存储在 Blob 存储中通常是一个很好的做
  • 在我的用户控件中找不到 GotFocus()/LostFocus()

    我创建了一个 WinForms 用户控件 我读过几个地方的内容GotFocus and LostFocus 事件 但我的用户控件未在 属性 窗口的 事件 部分中提供这些事件 我什至尝试打字override看看这些事件处理程序是否会出现 但他
  • 如何将 RVM 与 tcsh 一起使用?

    我想将 RVM 与 tcsh 一起使用 我该怎么做呢 据我所知 没有这方面的 官方 说明 我按照 将 RVM 与 tcsh 结合使用 http po ru com diary using rvm with tcsh 但这对我不起作用 特别是
  • PowerShell 变量声明中的大括号有什么意义吗?

    我遇到过这样声明的变量 或参数 var name Hello world 据我所知 这与以下内容没有什么不同 var name Hello world 我想知道是否 第一个示例中的大括号可以做任何事情或意味着任何事情 它们会改变变量的行为吗
  • 如何将 getdate 格式化为 YYYYMMDDHHmmSS

    在 SQL Server 中如何格式化getdate 输出到YYYYMMDDHHmmSS where HH是24小时格式吗 我有YYYYMMDD完成了 select CONVERT varchar GETDATE 112 但据我所知 Tha
  • 如何防止网格行跨度改变列位置?

    我有一个 3 X 3CSS Grid https developer mozilla org en US docs Web CSS CSS Grid Layout 我有一排 其中有三项A B C 我想要物品C有一个rowspan of 2
  • Spring boot 中不渲染 Jsp 视图页面。怎么解决呢?

    我正在尝试发出一个 ajax 请求 将一个值发送到我的 spring boot 但是 一旦我合并了 ajax 调用并且它成功地将值传递给 java 它就不会查看jsp页 我认为问题出在方法本身 但我不完全确定 我再次传递了值 但是每当我使用
  • 将功能绑定到按键不起作用

    My code import tkinter master tkinter Tk master title test1 master geometry 300x300 masterFrame tkinter Frame master mas
  • rcs 在 lm() 模型中生成错误的预测

    我正在尝试重现这篇博文 http www portfolioprobe com 2011 03 28 the devil of overfitting 关于过度拟合 我想探索样条曲线与测试多项式的比较 我的问题 使用 rcs 受限三次样条
  • 添加 2 级索引作为带有条件的其他索引的总和

    我有一个df df pd DataFrame from dict group 0 A 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9 B 10 B 11 B 12 B 13 B 14 B 15 B 16 B 17 B 1
  • 重新初始化 ScheduledExecutorService 中的修复延迟

    根据我的要求 我必须在一段时间后执行一些特定的代码 我选择做同样的事ScheduledExecutorService scheduleWithFixedDelay runnable 0 5 TimeUnit SECONDS 它对我来说工作得
  • Pandas DataFrame 列命名约定

    有没有常用的 Pandas DataFrame 列命名约定 是PEP8 https www python org dev peps pep 0008 在这里推荐 例如实例变量 意识到大量数据是从带有标题的外部源加载的 但我很好奇当我必须自己
  • 使用 R 文本挖掘包保留土耳其语字符

    首先我要说的是 我仍然是 R 的初学者 目前 我正在使用 tm 包尝试土耳其语文本的基本文本挖掘技术 然而 我在 R 中显示土耳其语字符时遇到了问题 这就是我所做的 docs lt VCorpus DirSource DIRECTORY e
  • Cordova / Phonegap:实时更新代码库

    我们将 Cordova 与 AngularJS 一起用于 iOS 和 Android 应用程序 iOS 的一大缺点是 Apple 的审核时间较长 在 Google 的 Playstore 中 您的应用程序几乎可以立即或在几个小时内可用 但苹
  • 可以信任第三方主机进行闭源/私有源代码管理吗? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 对于许多公司来说 他们项目的源代码对他们来说非常有价值 窃取源代码可能会造成非常高昂的代价 在本地网络上严格控制源代码是帮助保护源代码
  • npm 依赖冲突

    我正在使用 Vue 开发一个项目 我运行 Vue Cli 并添加了 Typescript 插件 我有几个弱点 当我跑步时npm audit fix它无法解决依赖冲突 npm ERR code ERESOLVE npm ERR ERESOLV
  • Airflow连接密码解密

    我想解密气流连接的密码 从连接表中获取值 有什么方法可以解密密码值 你可以做 from airflow hooks base hook import BaseHook connection BaseHook get connection c
  • Material-ui 芯片 - 拖放支持

    我想用材料 UI 芯片 https material ui com demos chips 在我的反应应用程序中 问题是我想通过拖放来移动芯片 不支持此功能material ui 是否有解决方法 扩展来使芯片可拖动 如果没有其他办法的话 我
  • Android 库项目作为 jar 文件进行分发,例如 google Analytics

    我见过this https stackoverflow com questions 5014128 create an android jar library for distribution问题 并且对创建一个我可以分发并可以在任何 An