2014-01-11 26 views
1

我有一個GPL android應用程序,它最近被包含在F-Droid中。有沒有什麼方法可以識別我的Android應用程序是由F-Droid構建的?

在谷歌Play的我使用AdMob廣告獲得一定的收入,但是當應用程序被F-Droid的服務器構建的,他們使用this AdMob clone所以代碼生成,而不需要增加一個二進制專有庫。因此,廣告不會顯示。

但是,我想添加一個小的「橫幅」,允許用戶在未顯示廣告時訪問我的網站:我不會獲得增加給我的直接收入,但至少我會允許用戶可以訪問我的頁面,如果他們願意,也可以捐款。

我的問題是:是否有任何方式知道下面的代碼中的「IM_USING_THE_REAL_ADMOB」?

另一種選擇是知道誰簽了APP。

任何幫助?

LinearLayout layout = (LinearLayout) findViewById(R.id.adLayout); 

if(IM_USING_THE_REAL_ADMOB) { 
    // Google Play version of the app 

    adView = new AdView(this, AdSize.BANNER, "ad-code"); 

    layout.addView(adView); 

    AdRequest request = new AdRequest(); 

    adView.loadAd(request); 
} else { 

    // F-Droid versions of the App 
    ImageView myImage;   

    layout.AddView(image) 
} 

我想看看簽名,如「CommonsWare建議,這樣做

PackageManager pm = getPackageManager(); 
try { 
    PackageInfo a = pm.getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); 
    byte[] raw = a.signatures[0].toByteArray(); 

    String sig = MessageDigest.getInstance("MD5").digest(raw).toString(); 

    _sourceTextEditor.setText(sig); 
    } 
    catch (Exception e) { 

     return false; 
    } 

,但我在兩部手機上安裝相同的簽署應用得到了不同的結果。我這樣做有什麼不對嗎?

回答

2

看起來,替換AdMob的AdView將始終將false返回到isReady並isRefreshing - 也許將此行爲與官方預期的AdView行爲進行比較AdMob並相應地調整您的應用。

+0

謝謝,但是我想在加載廣告之前知道,就像真正的AdMob一樣,有時候也會發生。 –

2

我同意powerj1984正確的答案是,假的AdMob庫讓你知道它是人造的AdMob庫。

如果無論出於何種原因,這是不可能的,您可以找出簽名您的應用程序的密鑰庫的公鑰的詳細信息。使用PackageManager and getPackageInfo()爲您自己的包檢索PackageInfo,指定GET_SIGNATURES作爲標誌。 PackageInfo上的signatures字段包含一組簽名,其中應該只有一個簽名。這反過來,確實是X509Certificatebyte[]表示。 This sample project顯示如何顯示任何已安裝的應用程序的簽名信息。

+0

我試圖獲得簽名,但在兩個不同的手機(安裝相同的apk)時打開另一個簽名,所以我無法用它來區分我自己簽名的應用(PlayStore)和其他人(FDroid) 。 也許我錯了。 –

+0

@ XaviIvars:你有什麼比較手段來表明它們不同? – CommonsWare

+0

我查看了簽名的MD5哈希值,並用它來比較,它對於模擬器中的調試包與手機中籤名的應用程序(這是有道理的,因爲它們是不同的簽名)是不同的,對於另一部手機中的相同簽名應用也是不同的(這根本沒有意義) –

0

如果你的應用程序是GPL,人們既有源代碼,又有權修改源代碼。沒有辦法迫使他們爲你提供收入。

+0

我知道他們有權修改來源。事實上,當我第一次將我的應用程序發佈爲GPL時,這就是我想要的。我並沒有試圖阻止任何人以任何方式使用該代碼:我想通過該廣告(圖片)實現的目的是顯示關於支持該服務的網站的一些信息(非營利ORG的網站,btw )。另外,我想要的是,如果有人想在任何意義上使用「不同的」應用程序(例如「同一個應用程序沒有廣告或圖像」),他們至少要修改代碼以刪除應用程序,就是這樣。 –

相關問題