Failed to connect to HTTPS using Retrofit 2 in Android < 21 - java

So, I've tried to connect my API https://api.*****.id that use TLS v1.2 (Let's Encrypt) through my Android.
Everything works as normal when using Android > 20, but when using Android < 21 the android monitor says:
W/dalvikvm: VFY: unable to find class referenced in signature (Ljava/nio/file/Path;)
W/dalvikvm: VFY: unable to find class referenced in signature ([Ljava/nio/file/OpenOption;)
I/dalvikvm: Could not find method java.nio.file.Files.newOutputStream, referenced from method okio.Okio.sink
W/dalvikvm: VFY: unable to resolve static method 23633: Ljava/nio/file/Files;.newOutputStream (Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;
D/dalvikvm: VFY: replacing opcode 0x71 at 0x000a
W/dalvikvm: VFY: unable to find class referenced in signature (Ljava/nio/file/Path;)
W/dalvikvm: VFY: unable to find class referenced in signature ([Ljava/nio/file/OpenOption;)
I/dalvikvm: Could not find method java.nio.file.Files.newInputStream, referenced from method okio.Okio.source
W/dalvikvm: VFY: unable to resolve static method 23632: Ljava/nio/file/Files;.newInputStream (Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;
D/dalvikvm: VFY: replacing opcode 0x71 at 0x000a
D/Error: java.net.ConnectException: Failed to connect to api.*****.id/64:ff9b::8b3b:eb77:443
I've implemented the TLSSocketFactory from here https://gist.github.com/fkrauthan/ac8624466a4dee4fd02f
Then have used it something like this:
httpClient = new OkHttpClient.Builder();
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2, TlsVersion.TLS_1_1)
.build();
if (Build.VERSION.SDK_INT < 21) {
X509TrustManager trustManager = TLSPatch.systemDefaultTrustManager();
httpClient.sslSocketFactory(new TLSPatch.TLSSocketFactory(), trustManager);
}
httpClient.connectionSpecs(Collections.singletonList(spec))
.readTimeout(60, TimeUnit.SECONDS);
Is anyone have issue something like this?

Whoops, I think, I found the problem.
Because my API uses cipher AES_256_GCM, I think SSL handshake always failed (behind the scene). So, instead uses cipher AES_256_GCM, I changed it to AES_128_GCM.
And this is my config
https://gist.github.com/nmfzone/d175d66752a0c1e1f460fd559b62546f.
Then, my code works properly. Actually, without custom SSLSocketFactory in Android < 21 should also work.

Related

How to android java socket connect?

E/dalvikvm: Could not find class 'android.view.WindowInsets', referenced from method androidx.core.view.WindowInsetsCompat.toWindowInsetsCompat
E/dalvikvm: Could not find class 'android.os.LocaleList', referenced from method androidx.core.os.LocaleListCompat.wrap
i want to socket connect and sendmsg in android java
this is error name what can i do?

sending a post request from android

I have been struggling for hours now. I have been trying to make a post request from my android application. I figured out that i can't just make a request from the main thread, so i found out that i can put it in a thread runnable. I snooped around for answers tried out a lot of methods people used, that worked for others and none of them worked for me. The one I kind of understood was this one(doesn't work for me):
package com.example.matt.event;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
public class lokacije extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lokacije);
thread.start();
}
Thread thread = new Thread(new Runnable(){
#Override
public void run()
{
HttpClient httpClient = new DefaultHttpClient();
// replace with your url
HttpPost httpPost = new HttpPost("http://www.awesomeholidays.com/login.php");
//Post Data
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("username", "123"));
nameValuePair.add(new BasicNameValuePair("password", "456"));
//Encoding POST data
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
Log.d("omg it doesn't work",e.toString());
e.printStackTrace();
}
//making POST request.
try {
HttpResponse response = httpClient.execute(httpPost);
// write response to log
Log.d("Http Post Response:", response.toString());
} catch (ClientProtocolException e) {
// Log exception
e.printStackTrace();
} catch (IOException e) {
// Log exception
e.printStackTrace();
}
}
});
}
I allowed it to get acces to internet so:
<uses-permission android:name="android.permission.INTERNET"/>
The server side script api works, as i am just using it in a web app.
Can somebody point me in the right direction? I am clueless. Where could be the error? Perhaps the error is in my gradle?(I had to download the http libraries from apache.com and include the in my gradle - had to add a dependency compile 'org.apache.httpcomponents:httpclient:4.5' and a bunch of packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
})Is there an easy way? Also found out about the okhttp library, I'm going to try to implement it, but i'm really not good with gradle and importing foreign libraries.
This is what i get:
11-28 20:49:49.587 10450-10450/? D/dalvikvm: Late-enabling CheckJNI
11-28 20:49:50.008 10450-10450/com.example.matic.eventer W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
11-28 20:49:50.008 10450-10450/com.example.matic.eventer I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.internal.view.WindowCallbackWrapper.onSearchRequested
11-28 20:49:50.008 10450-10450/com.example.matic.eventer W/dalvikvm: VFY: unable to resolve interface method 14051: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
11-28 20:49:50.008 10450-10450/com.example.matic.eventer D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
11-28 20:49:50.018 10450-10450/com.example.matic.eventer I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.internal.view.WindowCallbackWrapper.onWindowStartingActionMode
11-28 20:49:50.018 10450-10450/com.example.matic.eventer W/dalvikvm: VFY: unable to resolve interface method 14055: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
11-28 20:49:50.018 10450-10450/com.example.matic.eventer D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
11-28 20:49:50.238 10450-10450/com.example.matic.eventer I/dalvikvm: Could not find method android.view.ViewGroup.onRtlPropertiesChanged, referenced from method android.support.v7.widget.Toolbar.onRtlPropertiesChanged
11-28 20:49:50.248 10450-10450/com.example.matic.eventer W/dalvikvm: VFY: unable to resolve virtual method 13952: Landroid/view/ViewGroup;.onRtlPropertiesChanged (I)V
11-28 20:49:50.248 10450-10450/com.example.matic.eventer D/dalvikvm: VFY: replacing opcode 0x6f at 0x0007
11-28 20:49:50.268 10450-10450/com.example.matic.eventer I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
11-28 20:49:50.268 10450-10450/com.example.matic.eventer W/dalvikvm: VFY: unable to resolve virtual method 402: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
11-28 20:49:50.268 10450-10450/com.example.matic.eventer D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
11-28 20:49:50.278 10450-10450/com.example.matic.eventer I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
11-28 20:49:50.278 10450-10450/com.example.matic.eventer W/dalvikvm: VFY: unable to resolve virtual method 424: Landroid/content/res/TypedArray;.getType (I)I
11-28 20:49:50.278 10450-10450/com.example.matic.eventer D/dalvikvm: VFY:replacing opcode 0x6e at 0x0002
11-28 20:49:50.438 10450-10450/com.example.matic.eventer D/libEGL: loaded /system/lib/egl/libEGL_mali.so
11-28 20:49:50.458 10450-10450/com.example.matic.eventer D/libEGL: loaded /system/lib/egl/libGLESv1_CM_mali.so
11-28 20:49:50.458 10450-10450/com.example.matic.eventer D/libEGL: loaded /system/lib/egl/libGLESv2_mali.so
11-28 20:49:50.498 10450-10454/com.example.matic.eventer D/dalvikvm: GC_CONCURRENT freed 198K, 9% free 9534K/10375K, paused 3ms+32ms, total 128ms
11-28 20:49:50.518 10450-10450/com.example.matic.eventer D/OpenGLRenderer: Enabling debug mode 0
11-28 20:49:54.722 10450-10450/com.example.matic.eventer E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
11-28 20:49:54.722 10450-10450/com.example.matic.eventer E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
11-28 20:49:56.514 10450-10583/com.example.matic.eventer D/Http Post Response:: org.apache.http.message.BasicHttpResponse#417e0af0
Please help. :)
All the help is very appreciated.
Not sure about your error.
But for your question :
Is there an easy way? Also found out about the okhttp library,
Comparison of Android Networking Libraries: OkHTTP, Retrofit, Volley is the beautiful post that compares all the available network libraries on every factor. Never think of framing the headers, body and parsing the responses on your own. Also retry, cancel-ongoing-requests, caching etc all are very easily done through libraries. And Retrofit tops on every factor. We are using it and it is good. It supports JSON, XML, Jackson, Moshi, Protobuf and also Wire data formats. All you need to do is to create request Body model classes, and response models. Take a look at Retrofit beginner doc.
OK. First of all thank you all for answering. :) It helped a lot. I just imported the okhttp library into the project and i will work with this from now on. Seems easy enough. Thanks again.
May the code be with you all!
Sincerely,
Matic

Facebook integration - Android - Parse

I am using ParseFacebookUtilsV4-1.9.2.jar and everytime I am facing an error in this line:
ParseFacebookUtils.initialize(this);
The error I am facing is below
... I/dalvikvm﹕ Could not find method com.facebook.FacebookSdk.sdkInitialize, referenced from method com.parse.FacebookAuthenticationProvider.<init>
... I/dalvikvm﹕ Could not find method com.facebook.login.LoginManager.getInstance, referenced from method com.parse.FacebookAuthenticationProvider.authenticateAsync
... W/dalvikvm﹕ VFY: unable to resolve static method 14412: Lcom/facebook/login/LoginManager;.getInstance ()Lcom/facebook/login/LoginManager;
... W/dalvikvm﹕ VFY: unable to resolve static method 14411: Lcom/facebook/FacebookSdk;.sdkInitialize (Landroid/content/Context;I)V
... W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lcom/facebook/AccessToken;)
... I/dalvikvm﹕ Could not find method com.facebook.AccessToken.getUserId, referenced from method com.parse.FacebookAuthenticationProvider.getAuthData
... W/dalvikvm﹕ VFY: unable to resolve virtual method 14406: Lcom/facebook/AccessToken;.getUserId ()Ljava/lang/String;
... I/dalvikvm﹕ Could not find method com.facebook.CallbackManager.onActivityResult, referenced from method com.parse.FacebookAuthenticationProvider.onActivityResult
... W/dalvikvm﹕ VFY: unable to resolve interface method 14409: Lcom/facebook/CallbackManager;.onActivityResult (IILandroid/content/Intent;)Z
... I/dalvikvm﹕ Could not find method com.facebook.login.LoginManager.getInstance, referenced from method com.parse.FacebookAuthenticationProvider.restoreAuthentication
... W/dalvikvm﹕ VFY: unable to resolve static method 14412: Lcom/facebook/login/LoginManager;.getInstance ()Lcom/facebook/login/LoginManager;
... E/dalvikvm﹕ Could not find class 'com.facebook.AccessToken', referenced from method com.parse.FacebookAuthenticationProvider.restoreAuthentication
... W/dalvikvm﹕ VFY: unable to resolve new-instance 1749 (Lcom/facebook/AccessToken;) in Lcom/parse/FacebookAuthenticationProvider;
... I/dalvikvm﹕ Failed resolving Lcom/parse/FacebookAuthenticationProvider$1; interface 1753 'Lcom/facebook/FacebookCallback;'
... W/dalvikvm﹕ Link of class 'Lcom/parse/FacebookAuthenticationProvider$1;' failed
... W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41823700)
... E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.facebook.FacebookSdk
at com.parse.FacebookAuthenticationProvider.<init>(FacebookAuthenticationProvider.java:68)
at com.parse.ParseFacebookUtils.initialize(ParseFacebookUtils.java:96)
at com.parse.ParseFacebookUtils.initialize(ParseFacebookUtils.java:81)
...
Can anyone help me?
Note: ParseFacebookUtils requires Facebook Android SDK v4.x.x
from Parse docs
Could not find method com.facebook.FacebookSdk.sdkInitialize
This means you need Facebook SDK also. Parse call function from Facebook SDK which is not exist in your project.

Could not find method AdvertisingIdClient.getAdvertisingIdInfo

When trying to run Android project on my Meizu MX3, I get the problem mentioned in topic.
My logcat out is:
04-23 01:05:01.855: I/dalvikvm(18549): Could not find method com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo, referenced from method com.myapp.deviceinfo.AndroidDeviceInfo$1.run
04-23 01:05:01.855: W/dalvikvm(18549): VFY: unable to resolve static method 14581: Lcom/google/android/gms/ads/identifier/AdvertisingIdClient;.getAdvertisingIdInfo (Landroid/content/Context;)Lcom/google/android/gms/ads/identifier/AdvertisingIdClient$Info;
04-23 01:05:01.855: D/dalvikvm(18549): VFY: replacing opcode 0x71 at 0x0005
04-23 01:05:01.885: W/dalvikvm(18549): VFY: unable to resolve exception class 2144 (Lcom/google/android/gms/common/GooglePlayServicesNotAvailableException;)
04-23 01:05:01.885: W/dalvikvm(18549): VFY: unable to find exception handler at addr 0xa4
04-23 01:05:01.885: W/dalvikvm(18549): VFY: rejected Lcom/myapp/deviceinfo/AndroidDeviceInfo$1;.run ()V
04-23 01:05:01.885: W/dalvikvm(18549): VFY: rejecting opcode 0x0d at 0x00a4
04-23 01:05:01.885: W/dalvikvm(18549): VFY: rejected Lcom/myapp/deviceinfo/AndroidDeviceInfo$1;.run ()V
04-23 01:05:01.885: W/dalvikvm(18549): Verifier rejected class Lcom/myapp/deviceinfo/AndroidDeviceInfo$1;
Any help is going to be appreciated.
It was a big problem that made me stunned for a days.
I had tried all methods, like Proguard editing, changing libraries, context changing, but this solved the problem: simple update to new SDK build version 22.0.1; this fixed the issue.

JXTA Application on android

I am trying to build an app that establishes P2P connection between two wifi enabled android device. I have added JXTA 2.5 library into android 2.2, but don't know where i am going wrong. Ending up with run-time exception: No Class found error and Instance not found error.
Is there anything else to be done apart from just including .jar file into android project ?
Any configuration to be written ? If yes, please let know how i can write configuration file and employ it in my project ? I am working on final year project, so please let me know if you have any pointers regarding this ?
Thanks in advance !
Here is the Log :
04-24 22:41:47.429: I/dalvikvm(556): Could not find method org.apache.log4j.Logger.getLogger, referenced from method net.jxta.peergroup.PeerGroupFactory.<clinit>
04-24 22:41:47.429: W/dalvikvm(556): VFY: unable to resolve static method 8971: Lorg/apache/log4j/Logger;.getLogger (Ljava/lang/String;)Lorg/apache/log4j/Logger;
04-24 22:41:47.441: D/dalvikvm(556): VFY: replacing opcode 0x77 at 0x0010
04-24 22:41:47.461: W/dalvikvm(556): VFY: unable to resolve static field 4047 (ERROR) in Lorg/apache/log4j/Level;
04-24 22:41:47.461: D/dalvikvm(556): VFY: replacing opcode 0x62 at 0x0012
04-24 22:41:47.461: W/dalvikvm(556): VFY: unable to resolve static field 4050 (WARN) in Lorg/apache/log4j/Level;
04-24 22:41:47.461: D/dalvikvm(556): VFY: replacing opcode 0x62 at 0x000c
04-24 22:41:47.469: W/dalvikvm(556): VFY: unable to resolve static field 4048 (FATAL) in Lorg/apache/log4j/Level;
04-24 22:41:47.469: D/dalvikvm(556): VFY: replacing opcode 0x62 at 0x001a
04-24 22:41:47.469: W/dalvikvm(556): VFY: unable to resolve static field 4048 (FATAL) in Lorg/apache/log4j/Level;
04-24 22:41:47.480: D/dalvikvm(556): VFY: replacing opcode 0x62 at 0x0045
JXTA 2.5 is buggy. Just forget it. I lead release 2.6 and 2.7. We have corrected many issues. I have published a book about it called Practical JXTA II and you can read it online at scribd. It contains examples.
You will probably need a central super peer, unless you only use adhoc connections (broadcasting).

Categories