Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API Compatibility Issues #77

Open
lilicoding opened this issue Feb 11, 2017 · 0 comments
Open

API Compatibility Issues #77

lilicoding opened this issue Feb 11, 2017 · 0 comments

Comments

@lilicoding
Copy link

Dear developers,

We have recently developed a state-of-the-art static analysis tool for uncovering API compatibility issues in Android apps. Applying this tool to open source apps on F-droid, we have exposed a few instances of compatibility issues and submitting them to development teams for a fix.

For your app, we have found that this project has accessed the following APIs which are available only on an API level higher than the declared minSdkVersion and which are accessed without proper protection. In other words, if those APIs get called at runtime, it will trigger a NoSuchMethodError and thus result in a crash of the running application.

<android.app.backup.BackupAgentHelper: void onRestore(android.app.backup.BackupDataInput,int,android.os.ParcelFileDescriptor)>:[8,25]
<android.app.backup.BackupAgentHelper: void addHelper(java.lang.String,android.app.backup.BackupHelper)>:[8,25]
<android.app.backup.BackupManager: void (android.content.Context)>:[8,25]
<android.os.StrictMode: void setThreadPolicy(android.os.StrictMode.ThreadPolicy)>:[9,25]
<android.app.Service: void stopForeground(boolean)>:[5,25]
<android.text.AndroidCharacter: void getEastAsianWidths(char[],int,int,byte[])>:[8,25]
<android.app.Activity: android.app.ActionBar getActionBar()>:[11,25]
<android.app.backup.BackupAgentHelper: void onBackup(android.os.ParcelFileDescriptor,android.app.backup.BackupDataOutput,android.os.ParcelFileDescriptor)>:[8,25]
<android.app.ActionBar: void hide()>:[11,25]
<android.view.MenuItem: void setShowAsAction(int)>:[11,25]
<android.app.backup.BackupManager: void dataChanged()>:[8,25]
<android.app.Service: void startForeground(int,android.app.Notification)>:[5,25]

Note that, because of the nature of the static analysis, we cannot confirm whether the flagged APIs would actually be called at runtime (e.g., unreachable code). However, we still believe that those APIs, which may cause compatibility issues, should not be accessed or at least be accessed with proper protections.

In addition to the aforementioned APIs (i.e., backward-compatibility), which could cause app crashes if accessed, we have also identified that this project has also accessed some APIs that have been removed from the latest public SDK, making the app possibly suffer from forward-compatibility issues.

<org.apache.http.message.AbstractHttpMessage: void addHeader(java.lang.String,java.lang.String)>:[1,22]
<org.apache.http.HttpResponse: org.apache.http.HttpEntity getEntity()>:[1,22]
<java.lang.reflect.Array: java.lang.Object newInstance(java.lang.Class,int[])>:[1,8]
<org.apache.http.impl.client.AbstractHttpClient: org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest)>:[1,22]
<android.graphics.PixelXorXfermode: void (int)>:[1,23]
<org.apache.http.client.methods.HttpPost: void (java.lang.String)>:[1,22]
<org.apache.http.params.HttpProtocolParams: void setUseExpectContinue(org.apache.http.params.HttpParams,boolean)>:[1,22]
<org.apache.http.HttpEntity: java.io.InputStream getContent()>:[1,22]
<org.apache.http.message.BasicNameValuePair: void (java.lang.String,java.lang.String)>:[1,22]
<org.apache.http.client.methods.HttpEntityEnclosingRequestBase: void setEntity(org.apache.http.HttpEntity)>:[1,22]
<android.app.Notification: void setLatestEventInfo(android.content.Context,java.lang.CharSequence,java.lang.CharSequence,android.app.PendingIntent)>:[1,22]
<org.apache.http.impl.client.DefaultHttpClient: void ()>:[1,22]
<org.apache.http.impl.client.AbstractHttpClient: org.apache.http.params.HttpParams getParams()>:[1,22]
<org.apache.http.client.entity.UrlEncodedFormEntity: void (java.util.List,java.lang.String)>:[1,22]

We would be very much appreciated if you can acknowledge to us that those reported APIs are indeed problematic for the project’s long-term stability. please let us know if you need any more information relating to this issue report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant