在我的Android项目中,我使用了一个jar作为库.我将它包含在依赖项部分中,如下所示:
dependencies {
...
compile files('libs/thethirdpartylibrary.jar')
...
}
Run Code Online (Sandbox Code Playgroud)
我也想使用okhttp库,我包括这样的:
compile ('com.squareup.okhttp:okhttp:2.7.5')
Run Code Online (Sandbox Code Playgroud)
(这个特殊版本的okhttp取决于okio 1.6.0.)
问题是第三方jar库依赖于okio v0.9.0而更糟糕的是捆绑它.
结果,我在构建时遇到了一个dex冲突错误.
我能够通过手动从jar文件中删除okio来解决这个问题,这似乎有效.但我想知道是否有办法在gradle中做到这一点.
我的问题:我可以在构建时使用gradle从包含的jar中删除捆绑的,可传递的(< - 我希望我正确地使用这个词)依赖关系吗?
我正在使用数据绑定来绑定我的Android应用程序中的布局.
我已经设置了我的布局(my_custom.xml)并生成了绑定类(MyCustomBinding),但Android Studio似乎没有立即找到Binding类的.inflate(...)方法,将其标记为错误(红色文字!).
代码似乎是正确的,因为它编译和构建很好的APK.
如何让Android Studio正确更新?
这是我的自定义查看代码:
public class MyCustomView extends FrameLayout {
public MyCustomView(Context context) {
this(context, null, 0);
}
public MyCustomView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
MyCustomBinding binding = MyCustomBinding.inflate(inflater, this, true);
binding.aButton.setText("Whatever");
}
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/a_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:padding="10dp"
android:background="#000"
android:textColor="#fff"
android:layout_gravity="center"
/> …
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何删除目录的所有内容.
为了清理目录,我想删除其中的所有文件和目录:我想擦除里面的所有内容(文件和目录).
我尝试使用删除任务,但我无法弄清楚它也删除目录而不仅仅是文件.我尝试过不同的方法来指定目录,但没有任何作用.
task deleteGraphicsAssets(type:Delete) {
delete fileTree('src').include('**/*')
}
Run Code Online (Sandbox Code Playgroud)
.
task deleteGraphicsAssets(type:Delete) {
delete fileTree('src').include('/')
}
Run Code Online (Sandbox Code Playgroud)
.
task deleteGraphicsAssets(type:Delete) {
delete fileTree('src').include('*')
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏!
编辑:
这工作 - 但它似乎有点像黑客.
task deleteGraphicsAssets(type: Delete) {
def dirName = "src"
delete dirName
doLast {
file(dirName).mkdirs()
}
}
Run Code Online (Sandbox Code Playgroud)
我在寻找类似的东西:
task deleteGraphicsAssets(type: Delete) {
deleteContentsOfDirectory "src"
}
Run Code Online (Sandbox Code Playgroud)
要么
task deleteGraphicsAssets(type: Delete) {
delete {dir : "src", keepRoot : true }
}
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,其中包含在后台运行的活动和意图服务.
还有一个通知,显示进度条与后台进程的进度(它从服务器下载了大量文件).
该活动具有下载进度(用户在下载这些资产之前无法有意义地使用该应用程序).关闭此活动时,将显示带有进度条的通知.
我的问题:当应用程序被"任务管理器"(可通过android 4.0上的右键,具有两个矩形的那个)访问时,通知仍然存在.但它基本上是一个僵尸,因为用于更新它的服务已经死了.
换一种方式:当我的应用程序被杀死时,如何删除(或所有)通知?
我可以指定要在Android studio的布局预览中显示的字符串,例如TextView吗?(Lorem ipsum ...)
如果能够在布局编辑器中查看一些文本,例如查看文本大小是否正确等,将会非常有帮助.
我希望能够在gradle构建期间从我们的CMS(或某些数据库)加载res/values/strings.xml中的用户可见字符串的值.
例如
<string name="button_label">OK, do it</string>
Run Code Online (Sandbox Code Playgroud)
可以改为
<string name="button_label">OK, do it now!</string>
Run Code Online (Sandbox Code Playgroud)
... 管他呢.
这个想法是新的价值将从我们的CMS读取AT BUILD TIME,然后将被纳入APK文件.(动机是自动更改应用程序字符串,以便从现有CMS中读取应用程序中的任何文本).
实现这一目标的最佳方法是什么?是否有可能在构建期间生成/修改资源文件(例如strings.xml),就在它们被Android构建系统使用之前?
添加更多要求:
我的 viewmodel-savestate 版本是
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03'
在 1.0.0-alpha01 版本中,我可以使用
MyViewModel myVM = new ViewModelProvider(this, new SavedStateVMFactory(this)).get(MyVM.class);
Run Code Online (Sandbox Code Playgroud)
使用 savestate 创建视图模型,但在 1.0.0-alpha03 版本中,
SavedStateVMFactory
Run Code Online (Sandbox Code Playgroud)
无法工作,我需要使用new SavedStateViewModelFactory
但我不知道第二个参数是什么意思,代码可能如下所示:
myVM = new ViewModelProvider(this, new SavedStateViewModelFactory(getApplication(),xxxxxxx)).get(MyVM.class);
Run Code Online (Sandbox Code Playgroud)
我在 android 开发者网站上找不到任何关于此的文档,很遗憾
我想知道我是否应该保留一个Gson对象的单例实例来解析我的应用程序中的json.
这种方法有什么问题吗?是不成熟的优化?
考虑这个 Kotlin 类的类注释:
/**
* This class has two methods, one that takes one parameters ([foo]),
* and another one that takes two parameters ([foo]).
**/
class Clazz {
/* Foo with one. */
fun foo(a: Int) { }
/* Foo with two. */
fun foo(a: Int, b: Int) { }
}
Run Code Online (Sandbox Code Playgroud)
我希望第二个链接指向第二个函数(带有两个参数的函数)。
这在 Kotlin 文档语言中是可能的吗?
我正在开发一个内部库(我们称之为"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中.
如果有其他解决方案可以将库的用户/包含者必须做的工作量保持在最低限度,那么这也很有趣:)
非常感谢!