繁体   English   中英

如何在自己的过程中向具有库的Android应用程序添加分析

[英]How to add analytics to an Android application with a library in its own process

我有一个使用Google Analytics(分析)的Android应用程序。 按照Google的建议 ,它会覆盖android.app.Application并在其AndroidManifest.xml提供类名称:

<application
    android:name=".MyApplication">

我的应用程序依赖于包含必须在其自己的进程中运行的服务的库。 因此,其AndroidManifest.xml具有:

<application>
    <service
        android:name="org.myservice"
        android:enabled="true"
        android:exported="false"
        android:process=":myservice">

运行时,我发现在库的过程中启动了MyApplication的第二个独立实例。 这样会尝试设置分析等。但是,该库从未要求过此类,并且也不需要它。

我试图在库的AndroidManifest.xml声明一个不同的应用程序类,但这会导致“清单合并失败”生成错误。

如何避免依赖MyApplication的库进程?

由于清单是合并在一起的,因此只能有一个由android:name指定的类(在一个库中或在主应用程序中)。 这些对象之一将在每个进程中实例化。

我的解决方案是让Main应用程序类检测进程名称是否与APPLICATION_ID相匹配。 这仅对主要过程适用,而对其他任何过程均不适用。

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // The print library has its own process but will use this class.
        // Only set up analytics if we are in the main process.
        if (isMainProcess()) {
            // Once-per-app code here
        }
    }

    public boolean isMainProcess() {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == android.os.Process.myPid()) {
                return TextUtils.equals(BuildConfig.APPLICATION_ID,
                        processInfo.processName);
            }
        }
        return false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM