草庐IT

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

coder 2023-11-21 原文

我看过this问题,并且对创建一个我可以分发并可以在任何 Android 应用程序中使用的 jar 文件有更多疑问。

我的要求是什么

  1. 正如我所说,我想构建和分发一个闭源库。我 不希望源代码可见。
  2. 我不想在该库中使用任何 Assets 、布局和资源 等等,但我想使用一些 android 特定的代码,比如 getting android device id.

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

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

我认为我想要的是可能的,因为google analytics for android native apps似乎已经做到了。我确信在他们分发的 .jar 文件中,他们使用的是 android 特定代码,因为他们似乎没有其他方法可以获取设备信息以显示在分析查看器中。

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

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

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

  • 在项目中,我编写了我的逻辑。它使用一些安卓 特定类,如 SharedPreferenceUUIDPackageManager。但 与 Assets 无关,布局也没有类扩展 Activity 。只是一个扩展 java.lang.object

  • 的 java 类
  • 使用 Project->rightclick->export->Java->JAR 导出项目 文件。在下一个屏幕中,我取消选中附近的复选框 AndroidManifest.xml。设置要导出的目标目录和 在保持默认设置的情况下单击下一步三次。然后我点击 完成,在我的桌面上得到一个可爱的 libMyLibraryName.jar

然后我创建了另一个 android 项目,使用 project->rightclick->properties->java build path -> libraries->add external jar 添加了这个 libMyLibraryName.jar 到新项目。

我尝试在我的新项目中使用我在图书馆的类(class)

MyLibraryClass objClass = new MyLibraryClass(this);

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

现在我有 2 个问题。

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

However, a library project differs from an standard Android application project in that you cannot compile it directly to its own .apk and run it on an Android device. Similarly, you cannot export the library project to a self-contained JAR file, as you would do for a true library. Instead, you must compile the library indirectly, by referencing the library in the dependent application and building that application.

好吧,这部分取自 documentation在标题为“图书馆项目”下。

2) 我的第二个问题是,我创建 JAR 文件的方式有什么问题吗? 是否有任何可能的陷阱让我以后反悔?在我的重要项目中使用它之前,我想确保我没有做错什么。

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

最佳答案

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

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

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

回答您的其他问题:

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

  2. 我认为您创建 jar 文件的方式没有任何问题。我会用 android.jar 做的正如我上面提到的,但你的方式也应该有效。为了验证这一点,我将检查 jar 内容并确保您拥有的所有内容都是 .class文件。

关于Android 库项目作为 jar 文件进行分发,如 google analytics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10828014/

有关Android 库项目作为 jar 文件进行分发,如 google analytics的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  3. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  4. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  5. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  6. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  7. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  8. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  9. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  10. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

随机推荐