小编tre*_*ere的帖子

在Android Gradle构建中,如何从包含的jar文件中排除依赖项?

在我的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 jar gradle android-gradle-plugin

20
推荐指数
1
解决办法
3万
查看次数

找不到我的绑定的inflate方法(使用Android,Data Binding.)

我正在使用数据绑定来绑定我的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)

android android-layout android-databinding

20
推荐指数
1
解决办法
8557
查看次数

如何在gradle中删除空目录(或递归所有内容的目录)?

我无法弄清楚如何删除目录的所有内容.

为了清理目录,我想删除其中的所有文件和目录:我想擦除里面的所有内容(文件和目录).

我尝试使用删除任务,但我无法弄清楚它也删除目录而不仅仅是文件.我尝试过不同的方法来指定目录,但没有任何作用.

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)

gradle

17
推荐指数
4
解决办法
3万
查看次数

如何在Android应用程序(活动或服务)被杀死时删除所有通知?

我有一个应用程序,其中包含在后台运行的活动和意图服务.

还有一个通知,显示进度条与后台进程的进度(它从服务器下载了大量文件).

该活动具有下载进度(用户在下载这些资产之前无法有意义地使用该应用程序).关闭此活动时,将显示带有进度条的通知.

我的问题:当应用程序被"任务管理器"(可通过​​android 4.0上的右键,具有两个矩形的那个)访问时,通知仍然存在.但它基本上是一个僵尸,因为用于更新它的服务已经死了.

换一种方式:当我的应用程序被杀死时,如何删除(或所有)通知?

service notifications android

13
推荐指数
1
解决办法
1万
查看次数

使用Android数据绑定,如何指定在Android Studio的布局预览期间显示的虚拟(或"默认")文本?

我可以指定要在Android studio的布局预览中显示的字符串,例如TextView吗?(Lorem ipsum ...)

如果能够在布局编辑器中查看一些文本,例如查看文本大小是否正确等,将会非常有帮助.

android android-databinding

10
推荐指数
2
解决办法
1747
查看次数

在Android gradle构建中,在构建期间更改strings.xml的内容

我希望能够在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构建系统使用之前?


添加更多要求:

android gradle android-resources

9
推荐指数
1
解决办法
2647
查看次数

Android Jetpack 的 SavedStateViewModelFactory 是如何工作的?

我的 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 开发者网站上找不到任何关于此的文档,很遗憾

android android-jetpack

8
推荐指数
1
解决办法
3551
查看次数

在Android上,我应该/可以使用一个单独的Gson对象而不是在整个地方调用新的Gson()吗?

我想知道我是否应该保留一个Gson对象的单例实例来解析我的应用程序中的json.

这种方法有什么问题吗?是不成熟的优化?

android gson

7
推荐指数
1
解决办法
3210
查看次数

在 Kotlin 文档 (KDoc) 中,是否可以链接到特定的重载方法?

考虑这个 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 文档语言中是可能的吗?

kotlin kdoc dokka

7
推荐指数
1
解决办法
497
查看次数

gradle可以解决Android .aar文件中的依赖关系吗?

我正在开发一个内部库(我们称之为"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 build gradle aar

6
推荐指数
1
解决办法
1273
查看次数