基本上我想这样做:
也就是说,从一个 gradle 脚本中调用另一个函数中的一个函数。问题是我的 build.gradle 使用 Kotlin (build.gradle.kts),而我的函数所在的脚本仍然是 groovy。
我按照上面的 groovy-to-groovy 链接进行操作,但我无法使用 Kotlin DSL 使其工作。
在我的常规文件,functions.gradle 中,我有:
def buildVersionName() {
//Do some stuff
}
Run Code Online (Sandbox Code Playgroud)
和
ext {
buildVersionName = this.&buildVersionName
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的 build.gradle.kts 脚本中,我有:
apply(from = "functions.gradle")
project.ext.buildVersionName()
Run Code Online (Sandbox Code Playgroud)
当我同步时,我收到错误:
Unresolved reference: buildVersionName
Run Code Online (Sandbox Code Playgroud) 使用 KotlinPoet,为了生成用于向类和构造函数添加属性的 PropertySpec,您需要一个 TypeName 对象。
TypeMirror.asTypeName() KotlinPoet 函数已弃用,因为它并不总是对 Kotlin 类型正确工作。
但我找不到一个关于如何使用 kotlinpoet-metadata API 获取 Kotlin 类(例如 kotlin.String)的正确 TypeName 的示例,正如弃用消息所述的那样。
kotlinpoet-metadata API 的文档似乎也完全损坏(转到https://square.github.io/kotlinpoet/interop-kotlinx-metadata/#interop-with-kotlinx-metadata并单击 API 部分下的任何内容)
有谁有如何用一些 kotlinpoet-metadata 代码替换 TypeMirror.asTypeName() 来获取 TypeName 的示例,以便我可以创建 PropertySpec?
针对Android应用的新应用内订阅产品的实施似乎与常规托管/非托管产品相同,但是(afaik)获取订阅的到期日期仅可通过Google Play Android Develope基于HTTP的API获得.那部分让我一无所知.
使用Google API Java客户端库获取过期日期的任何实施示例都将是一个巨大的帮助.
我正在构建一个注释处理器,我最近使用kotlin-kapt插件从使用默认的annotationProcessor类型转换为kapt.
我正在使用该命令调试我的处理器
./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac
Run Code Online (Sandbox Code Playgroud)
(完整说明:https://stackoverflow.com/a/42488641/502463)
然后运行远程调试配置.当我使用annotationProcessor时,我可以点击断点,并进行调试.使用kapt,我的处理器运行,但我无法调试它.没有触发断点.
我的kotlin版本是1.1.2-3
remote-debugging annotation-processing kotlin kapt annotation-processor
我在Android Studio 0.5.4和Gradle 0.9.2中有一个多项目构建设置,依赖于多个Android库项目和Java项目,我注意到Gradle认为我的代码即将完成,即使我已经制作了变化.
如果我更改了xml布局文件,我可以构建并运行并且更改生效.但是对于代码更改,我必须使用Build-> Rebuild Project.
我下载了Android Studio 3.0 Canary 1预览版并使用AVD管理器下载了Android O x86系统映像.当我使用向导设置AVD时,使用Pixel手机作为硬件.当我启动模拟器时,它只会永久挂在启动屏幕上.
android emulation android-virtual-device android-studio android-8.0-oreo
我的项目在strings.xml中使用字符串声明,类似于:
<string name="file_size">File Size (%1$dMB)</string>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我正在使用
getResources().getString(R.string.file_size, getFileSize());
Run Code Online (Sandbox Code Playgroud)
其中getFileSize()返回long.林特给我这个错误:
"在file_size中格式化参数'#1'的参数类型错误:转换为'd',接收时间长(方法调用中的参数#2)"
这里发生了什么?Android文档说:

我正在编写一个应用程序,它有一个活动和一堆片段,其中一个片段是全屏的。为了实现这一点,我正在尝试使用系统 UI 可见性标志。
对于全屏片段,我设置了可见性:
layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
Run Code Online (Sandbox Code Playgroud)
一旦我这样做,窗口插图就会更改为似乎没有任何意义的值。然后,当我退出那个全屏片段时,我的视图中出现了错误的填充(基于奇怪的插图)
有谁知道这里发生了什么?我理解窗口插图的方式一定是错误的,因为这种行为似乎完全违反直觉。任何见解将不胜感激。
要查看我为说明问题而编写的测试应用程序的完整源代码,请访问此处:
当我尝试更新我的kotlin项目以针对Android Q构建时,我得到
失败:构建失败,发生异常。
出了什么问题:由于使用不受支持的插件版本包含Kotlin模块,因此不支持New Gradle Sync
尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。与--scan一起运行以获取完整的见解。
在https://help.gradle.org上获得更多帮助
2秒内失败
我试图在 2.5.1-SNAPSHOT 中使用 Retrofit 的协程支持,但我不断遇到奇怪的异常。
我的改造服务类别有:
@GET("weather")
suspend fun getForecast(@Query("q") query: String, @Query("num_of_days") numDays: String = "1",
@Query("format") format : String = "json", @Query("key") apiKey: String = API_KEY)
: Weather
Run Code Online (Sandbox Code Playgroud)
当我尝试调用它时,我得到:
2019-05-18 13:57:01.507 27422-27477/com.my.app E/MainPresenter$onResume$$inlined$CoroutineExceptionHandler: Something went wrong: No Retrofit annotation found. (parameter #5)
for method WeatherService.getForecast
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,因为错误出在参数 #5 上,但只有 4 个参数。有人以前见过这个吗?
另请注意,这是用于调试构建
minifyEnabled false
Run Code Online (Sandbox Code Playgroud)
所以我怀疑它是proguard...
我正在构建一个Android应用程序,根据屏幕大小调整大小,使用不同的布局文件夹(即大,xlarge等).
唯一的问题是我想为用户提供一种在小屏幕和大屏幕布局之间切换的方法,以防万一它们有一个无法识别xlarge标签的预蜂窝平板电脑,或者设备更接近手机大小但是仍然足够大,用户想要使用平板电脑布局.
有没有办法可以创建一个按钮来切换布局文件夹?我仍然想使用基于屏幕大小的自动文件夹选择,我只是希望能够强制应用程序使用一个文件夹或另一个.
那可能吗?