我正在开发一个内部库(我们称之为"banana_lib"),它将包含在Android应用程序项目中.我想以.aar文件的形式向客户端提供此库.
我的图书馆依赖于另一个图书馆(让我们说Gson).如果我能帮助它,我想避免将这种依赖的类捆绑到我的库中("胖罐","超级罐"方法).
我知道我可以要求我的库的用户将依赖项包含在应用程序的build.gradle文件中:
dependencies {
compile 'com.google.code.gson:gson:2.2.4'
compile files('libs/banana_lib.aar')
Run Code Online (Sandbox Code Playgroud)
}
但我不想让我的库的用户在应用程序的build.gradle文件中包含我的库的依赖项给图书馆用户带来负担.
问题: 有没有办法让gradle自动解析/包含.aar文件的依赖项?有什么办法可以让.aar库的用户尽量减少工作量?我需要提供一对.aar和.pom文件吗?我的主要目标是减少这个库的用户必须做的事情.我觉得图书馆应该理想地定义它的所有依赖项,gradle应该只在后台解决它们.
换一种略有不同的方式:有没有办法允许客户端/用户通过以下方式包含(内部!)库(具有外部依赖性):1.)将.aar文件添加到构建中.2.)将它包含在build.gradle中.
如果有其他解决方案可以将库的用户/包含者必须做的工作量保持在最低限度,那么这也很有趣:)
非常感谢!
我有一个命令行程序,根据一组源文件生成一个我想在 Android gradle 构建中使用的 jar 文件 (A)。该命令行程序只是将 jar 文件存储在磁盘上的目录中。
如何创建一个新的 gradle 项目 (B) 来运行 Android Gradle 项目 (A) 所依赖的命令行程序(在 gradle 多项目设置内):换句话说,如果 B 的源发生更改,它应该重建!
笔记:
项目 B 既不是 Android 库项目,也不是 java 项目。它只是通过命令行运行一个程序,该程序恰好在文件系统上存储了一个 jar 文件。
我想知道在Android代码中使用java文件中定义的字符串有什么缺点.
我喜欢使用普通的旧Java字符串来处理不可见字符串的内容,例如我正在解析的XML文档中的名称,或者bundle的键.将所有这些内容保存在使用它们的java文件中而不是将它们移动到XML文件中并使代码更复杂似乎是个好主意.
然而,我看到许多Android代码示例似乎将每个字符串放入资源文件中.
在java文件中使用字符串有什么问题?人们不这样做的原因是什么?我一直在我的应用程序中这样做,到目前为止还没有看到任何问题.
请注意,我知道XML文件对于需要翻译的内容非常有意义.这个问题适用于字符串保持不变的情况.
让我试着让这个问题更清楚:
有什么理由除外:
我正在为我的Android应用程序使用滑动库.
我想告诉它重新获取图像X次(可能是指数退避!),然后放弃并显示错误占位符图像.
知道怎么做吗?(我正在使用Volley整合btw).
使用Glide,我可以diskCacheStrategy在加载图像时设置a ,如下所示:
Glide.with(context)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
. ...
Run Code Online (Sandbox Code Playgroud)
有什么办法为此设置全局默认值吗?这样所有调用的行为都相同,例如始终仅缓存源?
是否可以在每次(gradle)构建之前在 Android Studio 中运行 unix shell 脚本?
我在 gradle 构建方面遇到了一些麻烦,一个有效的解决方案(诚然是糟糕的)是杀死所有 java 进程(如果它们拥有超过 6Mb 的内存)。
我想做的是运行一个 shell 脚本,在 Android Studio 中的每次构建之前执行此操作。
我不想在构建之前添加一个 gradle 任务来运行。这是行不通的,因为如果我杀死所有 java 进程,gradle 也会被杀死。
再说一遍:我可以设置 Android Studio(或 gradlew)在构建之前运行脚本吗?
我需要在我的应用程序内部了解蓝牙是打开还是关闭.或者,如果从操作系统设置下拉菜单打开或关闭蓝牙.我以为我可以在活动中做到这一点onResume().但事实证明,当Android操作系统的设置"下拉菜单"(通过用手指从屏幕的上边缘拉下来访问的菜单)打开时,活动不会暂停.
当蓝牙可用或不可用时,我需要更新我的UI.
我可以注册回拨(例如a BroadcastReceiver)或任何其他回调,让系统告诉我蓝牙可用性何时发生变化?
我正在探索 Kotlin Native,并且有一个程序,其中有一群Workers执行并发操作(在 Windows 上运行,但这是一个普遍问题)。
现在,我想添加简单的日志记录。一个组件,它通过将字符串作为新行附加到以“附加”模式保持打开的文件中来简单地记录字符串。
(理想情况下,我只有一个“全局”功能......
fun log(text:String) {...} ]
Run Code Online (Sandbox Code Playgroud)
...我可以从任何地方打电话,包括从其他工作人员“内部”打电话,这会起作用。这里的含义是,由于 Kotlin Native 关于在线程之间传递对象的规则,执行此操作并不简单(TLDR:您不应该传递可变对象。请参阅: https: //github.com/JetBrains/kotlin-native/blob /master/CONCURRENCY.md#对象传输和冻结)。另外,我的日志函数理想地接受任何冻结的对象。)
我想出的是使用DetachedObjectGraph 的解决方案:
首先,我创建一个分离的记录器对象
val loggerGraph = DetachedObjectGraph { FileLogger("/foo/mylogfile.txt")}
Run Code Online (Sandbox Code Playgroud)
然后使用loggerGraph.asCPointer()(asCPointer())获取COpaquePointer分离图:
val myPointer = loggerGraph.asCPointer()
Run Code Online (Sandbox Code Playgroud)
现在我可以将此指针传递给工作人员(通过工作人员的执行函数的生产者 lambda),并在那里使用它。或者我可以将指针存储在@ThreadLocal全局变量中。
对于写入文件的代码,每当我想要记录一行时,我都必须DetachedObjectGraph再次从指针创建一个对象,attach()以便获取对我的 fileLogger 对象的引用:
val fileLogger = DetachedObjectGraph(myPointer).attach()
Run Code Online (Sandbox Code Playgroud)
现在我可以在记录器上调用日志函数:
fileLogger.log("My log message")
Run Code Online (Sandbox Code Playgroud)
这就是我在查看 Kotlin Native 中可用于并发的 API(从 Kotlin 1.3.61 开始)时想到的,但我想知道更好的方法是什么(使用 Kotlin,而不是诉诸 C …
我想在libgdx的OpenGL Surface中发生的所有事情上显示一些自定义视图(例如带有阿拉伯语/亚洲文本的TextViews)(< - 我认为它是一个表面视图).这可能吗?怎么样?
我的动机是我有一个经过验证的组件,用于在现有代码中显示文本,我想继续使用它.
我之前使用过其他GLSurfaceViews和View层次结构.只是想知道如何在libgdx中完成此操作.性能并不重要因为libgdx中的"游戏"是一个简单的益智游戏,当显示文本视图时,游戏几乎暂停了.
这是一个关于回调函数的一般问题,在 Kotlin Native 中定义,由 C 函数调用。
为了便于论证,假设我正在尝试使用Kotlin Native中的https://linux.die.net/man/3/nftw递归地遍历文件系统中的目录。(我知道还有其他方法可以做到这一点,使用其他 C 函数,但这不是这个问题的核心。)
nftw() 将函数作为回调:
val directory = "//some/directory"
val callback = kotlinx.cinterop.staticCFunction {
file: CPointer<ByteVar>?,
stat: CPointer<stat>?,
typeFlag: Int,
b: CPointer<FTW>? ->
val fileName = file?.toKString()
println(fileName)
val result = 0
result
}
val depth = 10
val flags = 0
platform.posix.nftw(directory, callback, depth, flags)
Run Code Online (Sandbox Code Playgroud)
这适用于通过“println()”列出文件,但是一旦 lambda 包含任何捕获的值,我就会收到以下编译器错误:
“kotlinx.cinterop.staticCFunction 必须采用未绑定、非捕获函数或 lambda”。
我的问题是:是否有关于如何从此类回调访问任何非全局状态的推荐方法?
我确实想出了一个使用全局变量的讨厌的解决方法,所以这不是我主要寻找的。如果有使用@ThreadLocal或其他东西的普遍接受的解决方案,请讨论。