2014-02-10 64 views
0

我正在使用付費和免費版本創建Android應用程序。爲此,我創建了一個共享庫,然後在每個項目中更改了一些資源文件。使用共享庫將Google Analytics添加到其中一個Android項目中

在免費版本中,我想添加谷歌分析,我努力做到這一點。

谷歌說,我需要這個代碼添加到所有我想要跟蹤的活動:

@Override 
    public void onStart() { 
    super.onStart(); 
    ... // The rest of your onStart() code. 
    EasyTracker.getInstance(this).activityStart(this); // Add this method. 
    } 

    @Override 
    public void onStop() { 
    super.onStop(); 
    ... // The rest of your onStop() code. 
    EasyTracker.getInstance(this).activityStop(this); // Add this method. 
    } 

我想加入公正對待所有活動的免費版本此代碼。

可以做到這一點嗎?

我在圖書館裏想到我可以擴展一個只擴展Activity的類AnalyticsActivity,然後在免費版本中我可以重載這個類並添加所需的代碼。

public class MainActivity extends AnalyticsActivity { //rest of code } 

,那麼這將是在免費的項目覆蓋類:

public class AnalyticsActivity extends Activity{ 
    @Override 
    public void onStart() { 
     super.onStart(); 
     EasyTracker.getInstance(this).activityStart(this); // Add this method. 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     EasyTracker.getInstance(this).activityStop(this); // Add this method. 
    } 
} 

這是一個可能的解決方案,以及如何能不能做到,或者是有沒有更好的解決辦法?

回答

0

我會創建一個存根EasyTracker類,它實現相同的API,但什麼都不做(或者可能只在調試版本中記錄輸出)。這將需要對代碼其餘部分進行最少的更改。

您可以將此存根類包含在不導入Analytics庫的flavor中。

您的存根EasyTracker類看起來像這樣。我沒有真正編譯這段代碼,所以你需要找出導入並對其進行微調(你將不得不圍繞導入所需的其他分析類,或者嘲笑它們,或者嘗試包括他們從分析庫中沒有選擇真正的EasyTracker版本,雖然這可能會非常棘手 - 也許只是通過包括實際使用的方法調用的存根版本來幫助你自己),但這應該讓你開始:

package com.google.android.apps.analytics.easytracking; 

public class EasyTracker { 
    private static final EasyTracker INSTANCE = new EasyTracker(); 

    public static EasyTracker getTracker() { 
     return INSTANCE; 
    } 

    void addItem(Item item) {} 
    void addTransaction(Transaction transaction) {} 
    void clearTransactions() {} 
    void dispatch() {} 
    // Stub out all the rest of the methods like this 
} 

基本上你實現了EasyTracker類API中的所有方法,但它們都是空的方法體。請注意,這個類與真正做某事的真實版本在同一個包中。這意味着你可以將這個存根類替換爲原來的,而不需要修改調用它的代碼。

您可以將此類編譯爲jar文件並將jar包含在需要它的flavor中,也可以將其作爲普通的Java模塊。

然後,您需要選擇性地將代碼包含在需要它的風味中。你可能已經有依賴關係是這個樣子:

dependencies { 
    .... 
    compile files('libs/libGoogleAnalyticsV2.jar') 
} 

作出的分析庫的依賴依賴於味:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    flavor1Compile files('libs/libGoogleAnalyticsV2.jar') 
    flavor2Compile project(':MockAnalytics') 
} 
+0

謝謝您的回答。你能否進一步解釋我將如何去做這件事? – braza

+0

@braza - 編輯。 –

相關問題