繁体   English   中英

有什么方法可以确定我的Android应用是由F-Droid构建的吗?

[英]Is there any way I can identify when my Android app is built by F-Droid?

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

在Google Play的“我正在使用AdMob”获得一些收入,但是当该应用由F-Droid服务器构建时,它们使用此AdMob克隆,因此无需添加二进制专有库即可构建代码。 因此,不会显示广告。

但是,我想添加一个小的“横幅”,允许用户在广告未展示时访问我的网站:我不会获得添加所带来的直接收入,但至少我会允许用户访问我的页面,如果愿意,可以捐款。

我的问题是:有什么办法可以在以下代码中了解“ 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;
    }

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

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

我会同意powerj1984的观点,即正确的答案是仿制AdMob库,以便让您知道它是仿制AdMob库。

如果由于某种原因无法做到这一点,则可以查找对您的应用进行签名的密钥库的公共密钥的详细信息。 使用PackageManagergetPackageInfo()检索您自己的包的PackageInfo ,将GET_SIGNATURES指定为标志。 PackageInfo上的signatures字段包含一个签名数组,其中应该只有一个。 这实际上是X509Certificatebyte[]表示形式。 此示例项目显示了如何显示任何已安装应用程序的签名信息。

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

暂无
暂无

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

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