有什么方法可以识别我的Android应用程序是由F-Droid构建的吗?

时间:2014-01-11 15:15:22

标签: android admob

我有一个GPL安卓应用程序,最近已被包含在F-Droid中。

在Google 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;
    }

但我在安装相同签名应用程序的两部手机中得到了不同的结果。我做错了吗?

3 个答案:

答案 0 :(得分:2)

看起来替代AdMob的AdView将始终返回false给isReady和isRefreshing - 可能会将此行为与官方AdMob的预期AdView行为进行比较,并相应地调整您的应用。

答案 1 :(得分:2)

我同意powerj1984,正确的答案适用于虚假的AdMob库,让您知道它是虚假的AdMob库。

如果由于某种原因无法实现,您可以找到为您的应用签名的密钥库的公钥的详细信息。使用PackageManager and getPackageInfo()检索自己包的PackageInfo,并将GET_SIGNATURES指定为标记。 signatures上的PackageInfo字段包含一系列签名,其中只有一个。反过来,这实际上是byte[]的{​​{1}}表示。 This sample project显示了如何显示已安装应用的签名信息。

答案 2 :(得分:0)

如果您的应用是GPL,那么人们既拥有源代码,也有权修改源代码。没有办法强迫他们为你提供收入。