小编Flo*_*ryn的帖子

如何解决"在APK META-INF/*中复制的重复文件"

我在一个商业Android应用程序工作.我还使用了一些在不同许可证类型下获得许可的库,其中一些库说明了以下内容:

如果图书馆有一份带有归属说明的"NOTICE"文件,则您必须在分发时包含该通知

(其中一个是根据Apache License 2.0获得许可的).

有不止一个图书馆.当我使用gradleAndroid Studio进行构建时,我获得以下构建错误:

* What went wrong:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt
Run Code Online (Sandbox Code Playgroud)

我在互联网和stackoverflow上找到的答案建议从包装中删除license.txt(notice.txt或其他可能会干扰的文件),方法是添加build.gradle以下文件:

packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
}
Run Code Online (Sandbox Code Playgroud)

请参阅示例:Android Studio 0.4在APK META-INF/LICENSE.txt中复制的重复文件

根据这些库的许可证(例如Apache License 2.0),应包含许可证和通知文件.

我的问题: 如何将与许可相关的多个文件(例如license.txt,notice.txt等)从gradle添加到我的项目中以符合许可(技术细节:许可文本将被连接)?

java android gradle

91
推荐指数
2
解决办法
6万
查看次数

如何抑制警告“非最终字段上的同步”

是否可以抑制这种警告?

注意:我不是在寻找抑制所有警告(像这样@SuppressWarnings("all")),而只是在寻找 提到的类型。

java

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

为什么我得到:无法推断出使用'/'引起的(分数a)?

我在.hs文件中有以下代码

module TypeInference1 where
f :: Num a => a -> a -> a
f x y = x + y + 3
Run Code Online (Sandbox Code Playgroud)

然后,如果我检查f的类型,则会得到以下结果,这是可以的:

*TypeInference1> :t f
f :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

如果我将一个分数类型的参数传递给f并检查其类型,则获得:

*TypeInference1> :t f 1.0
f 1.0 :: Fractional a => a -> a
Run Code Online (Sandbox Code Playgroud)

但是另一方面,如果我通过对其中一个参数设置除法运算来更改f,则如下: f x y = x/2 + y + 3

我收到以下错误:

5-typeInference1.hs:4:9: error:
    • Could not deduce (Fractional a) arising from …
Run Code Online (Sandbox Code Playgroud)

haskell

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

如何使用BroadcastReceiver处理多个动作?

我试图用a BroadcastReceiver来处理多个动作.接收器注册了一个intent过滤器,但这限制了我只向接收器发送一种动作类型的意图(参见参考资料Intent.getAction();)

这是我的BroadcastReceiver类以及我想要处理其中的操作的方式.

class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
        switch(...){  //the criteria for switching to a particular case
                    ... //some cases to handle here
        }           
    }
}
Run Code Online (Sandbox Code Playgroud)

我注册意图的地方看起来像这样(在服务类中):

@Override
public void onCreate() {
    super.onCreate();
    mbr = new MyBroadcastReceiver();
    this.registerReceiver(mbr, new IntentFilter("MyBroadcastReceiver"));
}
Run Code Online (Sandbox Code Playgroud)

我打电话的方式看起来像这样(实际上我只是设置了一个按钮的监听器):

   //creating the pending intent
   PendingIntent myPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("MyBroadcastReceiver"), 0);
   //add button listener
   remoteViews.setOnClickPendingIntent(R.id.my_button, myPendingIntent);
Run Code Online (Sandbox Code Playgroud)

这种方式迫使我为每个想要传递给MyBroadcastReceiver的意图设置setAction("MyBroadcastReceiver").

但是我想传递具有不同动作的意图,我该怎么办?

或者这不是一个好的方法,最好是为每个不同的意图BroadcastReceiver使用它自己的单独实现IntentFilter …

android android-intent android-broadcast

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