ACRA: add more fields to crash reports, but no user identifying info
extended info on things we already have: * PRODUCT is another name for BRAND/PHONE_MODEL * TOTAL_MEM_SIZE can be derived from hardware name * DISPLAY is also available by looking up the hardware * STACK_TRACE_HASH should make automated sorting easier new info: * PACKAGE_NAME is only new info if the user is using a whitelabel app * AVAILABLE_MEM_SIZE can be used to track users, but only when provided at high resolution, e.g. once per second or higher. Most users only send a single crash report. High frequency reporters send under 100, which is still orders of magnatude below what is needed to track users.
This commit is contained in:
parent
b11cc6ab28
commit
0f98e1e125
@ -41,13 +41,14 @@ import android.text.TextUtils;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiskCache;
|
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiskCache;
|
||||||
import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
|
import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
||||||
|
import info.guardianproject.netcipher.NetCipher;
|
||||||
|
import info.guardianproject.netcipher.proxy.OrbotHelper;
|
||||||
import org.acra.ACRA;
|
import org.acra.ACRA;
|
||||||
|
import org.acra.ReportField;
|
||||||
import org.acra.ReportingInteractionMode;
|
import org.acra.ReportingInteractionMode;
|
||||||
import org.acra.annotation.ReportsCrashes;
|
import org.acra.annotation.ReportsCrashes;
|
||||||
import org.apache.commons.net.util.SubnetUtils;
|
import org.apache.commons.net.util.SubnetUtils;
|
||||||
@ -64,6 +65,7 @@ import org.fdroid.fdroid.installer.InstallHistoryService;
|
|||||||
import org.fdroid.fdroid.net.ImageLoaderForUIL;
|
import org.fdroid.fdroid.net.ImageLoaderForUIL;
|
||||||
import org.fdroid.fdroid.net.WifiStateChangeService;
|
import org.fdroid.fdroid.net.WifiStateChangeService;
|
||||||
import org.fdroid.fdroid.views.hiding.HidingManager;
|
import org.fdroid.fdroid.views.hiding.HidingManager;
|
||||||
|
import sun.net.www.protocol.bluetooth.Handler;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -72,14 +74,25 @@ import java.net.URLStreamHandlerFactory;
|
|||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import info.guardianproject.netcipher.NetCipher;
|
|
||||||
import info.guardianproject.netcipher.proxy.OrbotHelper;
|
|
||||||
import sun.net.www.protocol.bluetooth.Handler;
|
|
||||||
|
|
||||||
@ReportsCrashes(mailTo = "reports@f-droid.org",
|
@ReportsCrashes(mailTo = "reports@f-droid.org",
|
||||||
mode = ReportingInteractionMode.DIALOG,
|
mode = ReportingInteractionMode.DIALOG,
|
||||||
reportDialogClass = org.fdroid.fdroid.acra.CrashReportActivity.class,
|
reportDialogClass = org.fdroid.fdroid.acra.CrashReportActivity.class,
|
||||||
reportSenderFactoryClasses = org.fdroid.fdroid.acra.CrashReportSenderFactory.class
|
reportSenderFactoryClasses = org.fdroid.fdroid.acra.CrashReportSenderFactory.class,
|
||||||
|
customReportContent = {
|
||||||
|
ReportField.USER_COMMENT,
|
||||||
|
ReportField.PACKAGE_NAME,
|
||||||
|
ReportField.APP_VERSION_NAME,
|
||||||
|
ReportField.ANDROID_VERSION,
|
||||||
|
ReportField.PRODUCT,
|
||||||
|
ReportField.BRAND,
|
||||||
|
ReportField.PHONE_MODEL,
|
||||||
|
ReportField.DISPLAY,
|
||||||
|
ReportField.TOTAL_MEM_SIZE,
|
||||||
|
ReportField.AVAILABLE_MEM_SIZE,
|
||||||
|
ReportField.CUSTOM_DATA,
|
||||||
|
ReportField.STACK_TRACE_HASH,
|
||||||
|
ReportField.STACK_TRACE,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
public class FDroidApp extends Application {
|
public class FDroidApp extends Application {
|
||||||
|
|
||||||
|
@ -5,8 +5,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import org.acra.ACRAConstants;
|
|
||||||
import org.acra.ReportField;
|
import org.acra.ReportField;
|
||||||
import org.acra.collections.ImmutableSet;
|
import org.acra.collections.ImmutableSet;
|
||||||
import org.acra.collector.CrashReportData;
|
import org.acra.collector.CrashReportData;
|
||||||
@ -38,7 +36,7 @@ public class CrashReportSender implements ReportSender {
|
|||||||
private String[] buildSubjectBody(Context context, CrashReportData errorContent) {
|
private String[] buildSubjectBody(Context context, CrashReportData errorContent) {
|
||||||
ImmutableSet fields = this.config.getReportFields();
|
ImmutableSet fields = this.config.getReportFields();
|
||||||
if (fields.isEmpty()) {
|
if (fields.isEmpty()) {
|
||||||
fields = new ImmutableSet<ReportField>(ACRAConstants.DEFAULT_MAIL_REPORT_FIELDS);
|
return new String[]{"No ACRA Report Fields found."};
|
||||||
}
|
}
|
||||||
|
|
||||||
String subject = context.getPackageName() + " Crash Report";
|
String subject = context.getPackageName() + " Crash Report";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user