以上就是给各位分享如何签署自定义JCE安全提供程序,同时本文还将给你拓展.net–扩展自定义成员资格提供程序、5.0.0迁移后,使用提供程序的多提供程序失败、android–IQ自定义提供程序无法识别
以上就是给各位分享如何签署自定义JCE安全提供程序,同时本文还将给你拓展.net – 扩展自定义成员资格提供程序、5.0.0 迁移后,使用提供程序的多提供程序失败、android – IQ自定义提供程序无法识别、Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 如何签署自定义JCE安全提供程序
- .net – 扩展自定义成员资格提供程序
- 5.0.0 迁移后,使用提供程序的多提供程序失败
- android – IQ自定义提供程序无法识别
- Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1
如何签署自定义JCE安全提供程序
Sun的PKCS11 JCE安全提供程序缺少我们需要的某些功能。
因此,我使用原始资源编写了它的增强版本。
不幸的是,JCE基础结构拒绝新的提供者
“ JCE无法验证提供者”,
因为它没有正确签名。
javax.crypto.JceSecurity.verifyProviderJar(...)
抛出。
(呼叫javax.crypto.JarVerifier.verify()
)
关于如何签署新提供商以使其与JCE一起工作的任何建议?
答案1
小编典典该过程在文档“如何实现 提供者”中进行了描述。
它涉及到电子邮件 太阳向Oracle提供一些信息(包括您为签名密钥生成的CSR ),然后传真确认文档。让
您签发的证书可能需要一周或更长时间,所以未雨绸缪。
如果提供商提供的服务受到某些(压制性)政府的限制,则仅需要对提供商进行签名。例如,一个Cipher实现是一个受限制的“服务”,而MessageDigest是一个无限制的服务。我假设收到的消息是您正在尝试提供受限服务。
如果提供这些服务中的任何一种,则无法解决:您需要由Sun签发的代码签名证书。(IBM的一个也可能起作用;如果我没
记错的话,他们的代码签名CA也受支持,但是我对他们的发行过程一无所知。)
.net – 扩展自定义成员资格提供程序
我添加了一个新方法,但我无法在代码中的任何地方使用它.是否可以向我的自定义成员资格提供程序添加方法,还是在其他地方完成?
解决方法
((YourProviderType)Membership.Provider).YourMethod();
5.0.0 迁移后,使用提供程序的多提供程序失败
如何解决5.0.0 迁移后,使用提供程序的多提供程序失败?
我尝试迁移到 provider: ^5.0.0
并停止工作,对之前工作的内容进行采样。
@override
Widget build(BuildContext context) {
WidgetsFlutterBinding.ensureInitialized();
return MultiProvider(
providers: [
ChangeNotifierProvider<ConfigurationProvider>(create: (context) => ConfigurationProvider(preferences: widget.preloadedFs)),ChangeNotifierProvider<ManagerProvider>(create: (context) => ManagerProvider()),],child: Builder(builder: (context) {
ConfigurationProvider config = Provider.of<ConfigurationProvider>(context);
ThemeData customTheme;
ThemeData darkTheme;
darkTheme = config.blackThemeEnabled ? AppTheme.black(config.accentColor) : AppTheme.dark(config.accentColor);
customTheme = config.darkThemeEnabled ? darkTheme : AppTheme.white(config.accentColor);
List<Locale> supportedLocales = [];
supportedLanguages.forEach((element) => supportedLocales.add(Locale(element.languageCode,'''')));
return MaterialApp(
locale: _locale,supportedLocales: supportedLocales,localizationsDelegates: [
FallbackLocalizationDelegate(),AppLocalizationsDelegate(),GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,GlobalCupertinoLocalizations.delegate,localeResolutionCallback: (locale,supportedLocales) {
for (var supportedLocale in supportedLocales) {
if (supportedLocale?.languageCode == locale?.languageCode && supportedLocale?.countryCode == locale?.countryCode) {
return supportedLocale;
}
}
return supportedLocales?.first;
},builder: (context,child) {
return ScrollConfiguration(
behavior: CustomScrollBehavior(),child: child,);
},);
}),);
}
错误日志
======== Exception caught by widgets library =======================================================
The following ArgumentError was thrown building Builder(dirty,dependencies: [_InheritedProviderScope<ConfigurationProvider>]):
Invalid argument(s) (value): Must not be null
The relevant error-causing widget was:
Builder file:///home/sony/Flutter-sdk/Flutter-app/demo-Flutter/lib/main.dart:109:14
When the exception was thrown,this was the stack:
#0 ArgumentError.checkNotNull (dart:core/errors.dart:185:27)
#1 SharedPreferences._setValue (package:shared_preferences/shared_preferences.dart:146:19)
#2 SharedPreferences.setString (package:shared_preferences/shared_preferences.dart:132:7)
#3 LegacyPreferences.saveAudioDownloadpath (package:demo/internal/legacyPreferences.dart:127:11)
#4 ConfigurationProvider.audioDownloadpath= (package:demo/provider/configurationProvider.dart:165:17)
...
====================================================================================================
======== Exception caught by widgets library =======================================================
The following StateError was thrown building Builder(dirty,dependencies: [_InheritedProviderScope<ConfigurationProvider>]):
Bad state: Tried to read a provider that threw during the creation of its value.
The exception occurred during the creation of type ConfigurationProvider.
The relevant error-causing widget was:
Builder file:///home/sony/Flutter-sdk/Flutter-app/demo-Flutter/lib/main.dart:109:14
When the exception was thrown,this was the stack:
#0 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:661:7)
#1 _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:544:33)
#2 Provider.of (package:provider/src/provider.dart:289:29)
#3 _MainState.build.<anonymous closure> (package:demo/main.dart:110:49)
#4 Builder.build (package:Flutter/src/widgets/basic.dart:7798:48)
...
====================================================================================================
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
android – IQ自定义提供程序无法识别
经过大量研究后,我发现Openfire不支持消息归档并安装了插件OpenArchive.
现在归档工作正常,所有消息都存储得很好.
现在在客户端,我尝试发送一个IQ节来检索存档的聊天记录.
首先,我添加了一个IQ Provider,如下所示:
pm.addIQProvider(“list”,“urn:xmpp:archive”,new ListIQProvider());
然后我用了:
final IQ iq = new IQ() { @Override public String getChildElementXML() { return "<list xmlns=''urn:xmpp:archive'' with=''test@customOpenfire.com''><set xmlns=''http://jabber.org/protocol/rsm''><max xmlns=''http://jabber.org/protocol/rsm''>30</max></set> </list>"; } }; iq.setType(IQ.Type.GET); iq.setPacketID("987654321"); xmppConnection.sendPacket(iq);
它工作正常,我收到了答复.
<iq id="987654321" to="admin@customOpenfire.com/Smack" type="result"> <list xmlns="urn:xmpp:archive"> <chat with="test@customOpenfire.com" start="2014-04-06T12:11:28.674Z"/> <chat with="test@customOpenfire.com" start="2014-04-03T16:55:59.523Z"/> <chat with="test@customOpenfire.com" start="2014-04-05T16:33:03.377Z"/> <chat with="test@customOpenfire.com" start="2014-04-02T14:32:10.499Z"/> <chat with="test@customOpenfire.com" start="2014-04-06T12:47:52.961Z"/> <chat with="test@customOpenfire.com" start="2014-04-03T14:46:24.877Z"/> <chat with="test@customOpenfire.com" start="2014-04-06T12:37:14.608Z"/> <chat with="test@customOpenfire.com" start="2014-04-03T15:48:46.642Z"/> <chat with="test@customOpenfire.com" start="2014-04-02T13:46:07.750Z"/> <chat with="test@customOpenfire.com" start="2014-04-04T18:25:57.968Z"/> <chat with="test@customOpenfire.com" start="2014-04-03T19:08:45.238Z"/> <chat with="test@customOpenfire.com" start="2014-04-04T18:47:19.067Z"/> <chat with="test@customOpenfire.com" start="2014-04-04T19:34:27.819Z"/> <chat with="test@customOpenfire.com" start="2014-04-02T15:09:13.140Z"/> <chat with="test@customOpenfire.com" start="2014-04-03T18:30:36.804Z"/> <chat with="test@customOpenfire.com" start="2014-04-05T14:09:34.973Z"/> <chat with="test@customOpenfire.com" start="2014-04-04T22:47:54.363Z"/> <chat with="test@customOpenfire.com" start="2014-04-02T15:32:44.540Z"/> <chat with="test@customOpenfire.com" start="2014-04-03T17:18:37.940Z"/> <chat with="test@customOpenfire.com" start="2014-04-03T13:37:15.630Z"/> <chat with="test@customOpenfire.com" start="2014-04-04T17:10:39.116Z"/> <set xmlns="http://jabber.org/protocol/rsm"> <first index="0">66</first> <last>139</last> <count>21</count> </set> </list> </iq>
然后我想检索实际的消息,所以我发送了这个IQ节:
final IQ iq = new IQ() { @Override public String getChildElementXML() { return "<retrieve xmlns=''urn:xmpp:archive'' with=''test@customOpenfire.com''><set xmlns=''http://jabber.org/protocol/rsm''><max xmlns=''http://jabber.org/protocol/rsm''>30</max></set> </retrieve>"; } }; iq.setType(IQ.Type.GET); iq.setPacketID("987654321"); xmppConnection.sendPacket(iq);
当然,在我创建自定义提供程序后,如下所示添加它:
pm.addIQProvider("retrieve","urn:xmpp:archive",new ChatIQProvider());
我应该收到类似的东西:
<iq xmlns="jabber:client" type="result" id="hgfg" to="admin@customOpenfire.com/7dd0f2fc"> <chat xmlns="urn:xmpp:archive" with="test@customOpenfire.com" start="2014-04-02T13:46:07.750Z"> <from secs="0" jid="test@customOpenfire.com"> <body>hello</body> </from> <to secs="2"> <body>hey</body> </to> <from secs="5" jid="test@customOpenfire.com"> <body>test</body> </from> <set xmlns="http://jabber.org/protocol/rsm"> <first index="0">0</first> <last>2</last> <count>3</count> </set> </chat>
但是在我的数据包侦听器中,结果未被解析,并且如果我删除ListIQProvider(),就像处理list节一样对待它.
这是我的自定义类:
ChatIQ:
public class ChatIQ extends IQ { private String xmlns; private String with; private String start; private List<From> froms; private Set set; public ChatIQ() { this.froms = new ArrayList<ChatIQ.From>(); } public String getXmlns() { return xmlns; } public void setXmlns(String xmlns) { this.xmlns = xmlns; } public String getWith() { return with; } public void setWith(String with) { this.with = with; } public String getStart() { return start; } public void setStart(String start) { this.start = start; } public void addFrom(From from) { froms.add(from); } public List<From> getFroms() { return froms; } public Set getSet() { return set; } public void setSet(Set set) { this.set = set; } @Override public String getChildElementXML() { StringBuilder builder = new StringBuilder("<chat xmlns=\"urn:xmpp:archive\""); builder.append("with=\"").append(with).append("\""); builder.append(" start=\""); builder.append(start); builder.append("\">"); for(From from : froms) { builder.append(from.toXml()); } builder.append(set.toXml()); builder.append("</chat>"); return builder.toString(); } public static class From { private String secs; private String jid; private Body body; public String getSecs() { return secs; } public void setSecs(String secs) { this.secs = secs; } public String getJid() { return jid; } public void setJid(String jid) { this.jid = jid; } public Body getBody() { return body; } public void setBody(Body body) { this.body = body; } public String toXml() { StringBuilder builder = new StringBuilder("<from "); builder.append("secs=\"").append(secs).append("\" "); builder.append("jid=\"").append(jid).append("\" >"); builder.append(body.toXml()); builder.append("</from>"); return builder.toString(); } } public static class Body { private String message; public Body(String message) { this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Object toXml() { StringBuilder builder = new StringBuilder("<body>"); builder.append(message); builder.append("</body>"); return builder.toString(); } } public static class Set { private int last; private int count; private int indexAtt; private int first; public Set() { } public int getLast() { return last; } public void setLast(int last) { this.last = last; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getIndexAtt() { return indexAtt; } public void setIndexAtt(int indexAtt) { this.indexAtt = indexAtt; } public int getFirst() { return first; } public void setFirst(int first) { this.first = first; } public String toXml() { StringBuilder builder = new StringBuilder("<set xmlns=\"http://jabber.org/protocol/rsm\">"); builder.append("<first index=\"").append(indexAtt).append("\">").append(first).append("</first>"); builder.append("<last>").append(last).append("</last>"); builder.append("<count>").append(count).append("</count>"); builder.append("</set>"); return builder.toString(); } } }
ChatIQProvider:
public class ChatIQProvider implements IQProvider { public ChatIQProvider() { } @Override public IQ parseIQ(XmlPullParser parser) throws Exception { Log.d("CHAT IQ PROVIDER",String.format("Received iq packet,namespace[%s],name[%s]",parser.getNamespace(),parser.getName())); ChatIQ iq = new ChatIQ(); ChatIQ.Set set = new Set(); boolean done = false; From from = new From(); String secs = "",jid = ""; while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { if (parser.getName().equals("from")) { secs = parser.getAttributeValue("","secs"); jid = parser.getAttributeValue("","jid"); from = new From(); iq.addFrom(from); } else if(parser.getName().equals("body") && from.getBody()==null) { ChatIQ.Body body = new Body(parser.nextText()); from.setBody(body); } else if (parser.getName().equals("first")) { int index = parseInt(parser.getAttributeValue("","index")); set.setIndexAtt(index); int first = parseInt(parser.nextText()); set.setFirst(first); } else if (parser.getName().equals("last")) { int last = parseInt(parser.nextText()); set.setLast(last); } else if (parser.getName().equals("count")) { int count = parseInt(parser.nextText()); set.setCount(count); } } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("chat")) { iq.setSet(set); done = true; } } } return iq; } private int parseInt(String integer) { return Integer.parseInt((integer != null ? integer : "0")); } }
我的问题如下:
>为什么我的自定义IQProvider不被识别?
>我可以获取收到的XML并解析它而无需通过IQproviders吗?
>是否有更简单的方法从服务器检索存档的消息?知道消息存在并且我确实在客户端接收它们,我就找不到获取内容并解析它的方法.
谢谢.
解决方法
无论如何,修复非常简单.代替:
pm.addIQProvider("retrieve",new ChatIQProvider());
我应该用过:
pm.addIQProvider("chat",new ChatIQProvider());
我必须注册IQ响应的子标记的名称而不是请求,因此“聊天”而不是“检索”.
希望这会有所帮助,因为我在android smack api中找不到任何关于使用自定义IQ的例子.
由于评论太长,我在这里添加了它.
干得好:
ListIQProvider:
public class ListIQProvider implements IQProvider { public ListIQProvider() { } @Override public IQ parseIQ(XmlPullParser parser) throws Exception { ListIQ iq = new ListIQ(); ListIQ.Set set = new Set(); boolean done = false; String with = "",start = ""; while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { if (parser.getName().equals("chat")) { with = parser.getAttributeValue("","with"); start = parser.getAttributeValue("","start"); iq.addChat(new Chat(with,start)); } else if (parser.getName().equals("first")) { int index = parseInt(parser.getAttributeValue("","index")); set.setIndexAtt(index); int first = parseInt(parser.nextText()); set.setFirst(first); } else if (parser.getName().equals("last")) { int last = parseInt(parser.nextText()); set.setLast(last); } else if (parser.getName().equals("count")) { int count = parseInt(parser.nextText()); set.setCount(count); } } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("list")) { iq.setSet(set); done = true; } } } return iq; } private int parseInt(String integer) { return Integer.parseInt((integer != null ? integer : "0")); }
}
ListIQ:
public class ListIQ extends IQ { private List<Chat> chats; private Set set; public ListIQ() { this.chats = new ArrayList<ListIQ.Chat>(); } public Set getSet() { return set; } public void setSet(Set set) { this.set = set; } public void addChat(Chat chat) { chats.add(chat); } public List<Chat> getChats() { return chats; } @Override public String getChildElementXML() { StringBuilder builder = new StringBuilder("<list xmlns=\"urn:xmpp:archive\">"); for (Chat chat : chats) { builder.append(chat.toXml()); } builder.append(set.toXml()); builder.append("</list>"); return builder.toString(); } public static class Chat { private String with; private String start; public Chat() { } public Chat(String with,String start) { this.with = with; this.start = start; } public String getWith() { return with; } public void setWith(String with) { this.with = with; } public String getStart() { return start; } public void setStart(String start) { this.start = start; } public String toXml() { StringBuilder builder = new StringBuilder("<chat with=\""); builder.append(with).append("\""); builder.append(" start=\""); builder.append(start); builder.append("\"/>"); return builder.toString(); } } public static class Set { private int last; private int count; private int indexAtt; private int first; public Set() { } public int getLast() { return last; } public void setLast(int last) { this.last = last; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getIndexAtt() { return indexAtt; } public void setIndexAtt(int indexAtt) { this.indexAtt = indexAtt; } public int getFirst() { return first; } public void setFirst(int first) { this.first = first; } public String toXml() { StringBuilder builder = new StringBuilder("<set xmlns=\"http://jabber.org/protocol/rsm\">"); builder.append("<first index=\"").append(indexAtt).append("\">").append(first).append("</first>"); builder.append("<last>").append(last).append("</last>"); builder.append("<count>").append(count).append("</count>"); builder.append("</set>"); return builder.toString(); } } }
我只是使用这个类来调用ServiceProviders.Register_Providers(ProviderManager.getInstance());在连接Xmpp连接之后.
服务供应商:
public class ServiceProviders { public static void Register_Providers(ProviderManager pm) { Log.e("PROVIDER","START"); // Private Data Storage pm.addIQProvider("query","jabber:iq:private",new PrivateDataManager.PrivateDataIQProvider()); // Time try { pm.addIQProvider("query","jabber:iq:time",Class.forName("org.jivesoftware.smackx.packet.Time")); } catch (ClassNotFoundException e) { Log.w("TestClient","Can''t load class for org.jivesoftware.smackx.packet.Time"); } // Roster Exchange pm.addExtensionProvider("x","jabber:x:roster",new RosterExchangeProvider()); // Message Events pm.addExtensionProvider("x","jabber:x:event",new MessageEventProvider()); // Chat State pm.addExtensionProvider("active","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider()); pm.addExtensionProvider("composing",new ChatStateExtension.Provider()); pm.addExtensionProvider("paused",new ChatStateExtension.Provider()); pm.addExtensionProvider("inactive",new ChatStateExtension.Provider()); pm.addExtensionProvider("gone",new ChatStateExtension.Provider()); // XHTML pm.addExtensionProvider("html","http://jabber.org/protocol/xhtml-im",new XHTMLExtensionProvider()); // Group Chat Invitations pm.addExtensionProvider("x","jabber:x:conference",new GroupChatInvitation.Provider()); // Service discovery # Items pm.addIQProvider("query","http://jabber.org/protocol/disco#items",new discoverItemsProvider()); // Service discovery # Info pm.addIQProvider("query","http://jabber.org/protocol/disco#info",new discoverInfoProvider()); // Data Forms pm.addExtensionProvider("x","jabber:x:data",new DataFormProvider()); // MUC User pm.addExtensionProvider("x","http://jabber.org/protocol/muc#user",new MUCUserProvider()); // MUC Admin pm.addIQProvider("query","http://jabber.org/protocol/muc#admin",new MUCAdminProvider()); // MUC Owner pm.addIQProvider("query","http://jabber.org/protocol/muc#owner",new MUCOwnerProvider()); // Delayed Delivery pm.addExtensionProvider("x","jabber:x:delay",new DelayinformationProvider()); // Version try { pm.addIQProvider("query","jabber:iq:version",Class.forName("org.jivesoftware.smackx.packet.Version")); } catch (ClassNotFoundException e) { // Not sure what''s happening here. } // VCard pm.addIQProvider("vCard","vcard-temp",new VCardProvider()); // Offline Message Requests pm.addIQProvider("offline","http://jabber.org/protocol/offline",new OfflineMessageRequest.Provider()); // Offline Message Indicator pm.addExtensionProvider("offline",new OfflineMessageInfo.Provider()); // Last Activity pm.addIQProvider("query","jabber:iq:last",new LastActivity.Provider()); // User Search pm.addIQProvider("query","jabber:iq:search",new UserSearch.Provider()); // SharedGroupsInfo pm.addIQProvider("sharedgroup","http://www.jivesoftware.org/protocol/sharedgroup",new SharedGroupsInfo.Provider()); // JEP-33: Extended Stanza Addressing pm.addExtensionProvider("addresses","http://jabber.org/protocol/address",new MultipleAddressesProvider()); // FileTransfer pm.addIQProvider("si","http://jabber.org/protocol/si",new StreamInitiationProvider()); pm.addIQProvider("query","http://jabber.org/protocol/bytestreams",new BytestreamsProvider()); // Privacy pm.addIQProvider("query","jabber:iq:privacy",new PrivacyProvider()); pm.addIQProvider("command","http://jabber.org/protocol/commands",new AdHocCommandDataProvider()); pm.addExtensionProvider("malformed-action",new AdHocCommandDataProvider.MalformedActionError()); pm.addExtensionProvider("bad-locale",new AdHocCommandDataProvider.BadLocaleError()); pm.addExtensionProvider("bad-payload",new AdHocCommandDataProvider.BadPayloadError()); pm.addExtensionProvider("bad-sessionid",new AdHocCommandDataProvider.BadSessionIDError()); pm.addExtensionProvider("session-expired",new AdHocCommandDataProvider.SessionExpiredError()); pm.addIQProvider("query",new discoverInfoProvider()); pm.addExtensionProvider("x",new DataFormProvider()); // archive pm.addIQProvider("list",new ListIQProvider()); pm.addIQProvider("chat",new ChatIQProvider()); } }
@HirenPatel
首先,您需要将存档插件添加到Openfire.
然后在客户端中的Xmpp连接之后,您必须注册您的提供程序,包括帮助检索聊天消息的提供程序:
pm.addIQProvider("list",new ListIQProvider()); pm.addIQProvider("chat",new ChatIQProvider());
然后你需要发送一个IQ节,如下所示:
final IQ iq = new IQ() { @Override public String getChildElementXML() { return "<retrieve xmlns=''urn:xmpp:archive'' with=''test@customOpenfire.com''><set xmlns=''http://jabber.org/protocol/rsm''><max xmlns=''http://jabber.org/protocol/rsm''>30</max></set> </retrieve>"; } }; iq.setType(IQ.Type.GET); iq.setPacketID("987654321"); xmppConnection.sendPacket(iq);
Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1
如何解决Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1?
清单文件中的第31行出现错误:
android:name="com.assurant.inservice.ReassureApplication"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:launchMode="singleTask"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config">-----**line no 31**
//内部网络安全配置
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
build.gradle文件(应用程序级别)
依赖性{
implementation filetree(dir: ''libs'',include: [''*.jar''])
implementation ''androidx.appcompat:appcompat:1.2.0''
implementation ''androidx.constraintlayout:constraintlayout:2.0.1''
implementation ''androidx.legacy:legacy-support-v4:1.0.0''
implementation ''net.gotev:uploadservice:2.1''
implementation ''de.hdodenhof:circleimageview:2.2.0''
implementation ''com.google.android.material:material:1.0.0''
implementation ''androidx.annotation:annotation:1.1.0''
implementation ''androidx.lifecycle:lifecycle-extensions:2.2.0''
implementation ''com.google.firebase:firebase-analytics:17.5.0''
testImplementation ''junit:junit:4.12''
androidTestImplementation ''androidx.test.ext:junit:1.1.2''
androidTestImplementation ''androidx.test.espresso:espresso-core:3.3.0''
implementation ''com.intuit.sdp:sdp-android:1.0.3''
//noinspection GradleCompatible
implementation "com.android.support:cardview-v7:28.0.0"
//noinspection GradleCompatible
implementation ''com.android.support:recyclerview-v7:28.0.0''
implementation ''com.github.bumptech.glide:glide:4.8.0''
annotationProcessor ''com.github.bumptech.glide:compiler:4.4.0''
implementation ''org.jsoup:jsoup:1.11.3''
implementation "com.squareup.retrofit2:retrofit:2.4.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
implementation "com.squareup.retrofit2:converter-gson:2.4.0"
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation ''com.squareup.okhttp3:logging-interceptor:4.8.1''
implementation ''com.jakewharton.retrofit:retrofit2-kotlin-coroutines-experimental-adapter:1.0.0''
implementation ''io.reactivex.rxjava2:rxjava:2.2.11''
implementation ''io.reactivex.rxjava2:rxandroid:2.1.1''
implementation ''com.google.code.ksoap2-android:ksoap2-android:3.6.0''
implementation ''com.davemorrissey.labs:subsampling-scale-image-view:3.10.0''
implementation ''com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1''
implementation ''com.google.firebase:firebase-crashlytics:17.2.1''
implementation "com.google.android.gms:play-services-base:17.4.0"
implementation "com.google.android.gms:play-services-vision:20.1.2"
//实现''com.google.android.gms:play-services:12.0.1'' 实施项目(路径:“:library”)
}
构建Gradle类级别:
依赖性{
classpath ''com.android.tools.build:gradle:3.6.4''
classpath ''com.google.firebase:firebase-crashlytics-gradle:2.2.1''
classpath ''com.google.gms:google-services:4.3.3''
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
我们今天的关于如何签署自定义JCE安全提供程序的分享已经告一段落,感谢您的关注,如果您想了解更多关于.net – 扩展自定义成员资格提供程序、5.0.0 迁移后,使用提供程序的多提供程序失败、android – IQ自定义提供程序无法识别、Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1的相关信息,请在本站查询。
本文标签: