我在一个商业Android应用程序工作.我还使用了一些在不同许可证类型下获得许可的库,其中一些库说明了以下内容:
如果图书馆有一份带有归属说明的"NOTICE"文件,则您必须在分发时包含该通知
(其中一个是根据Apache License 2.0获得许可的).
有不止一个图书馆.当我使用gradle或Android 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添加到我的项目中以符合许可(技术细节:许可文本将被连接)?
是否可以抑制这种警告?
注意:我不是在寻找抑制所有警告(像这样@SuppressWarnings("all")),而只是在寻找 提到的类型。
我在.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) 我试图用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 …