[英]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库。
如果由于某种原因无法做到这一点,则可以查找对您的应用进行签名的密钥库的公共密钥的详细信息。 使用PackageManager
和getPackageInfo()
检索您自己的包的PackageInfo
,将GET_SIGNATURES
指定为标志。 PackageInfo
上的signatures
字段包含一个签名数组,其中应该只有一个。 这实际上是X509Certificate
的byte[]
表示形式。 此示例项目显示了如何显示任何已安装应用程序的签名信息。
如果您的应用程序是GPL,则人们既拥有源代码,又有权修改源代码。 没有办法强迫他们为您提供收入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.