Android 应用即席分发和代码签名(检测 UID)

Posted

技术标签:

【中文标题】Android 应用即席分发和代码签名(检测 UID)【英文标题】:Android app ad-hoc distribution and code signing ( detecting UID ) 【发布时间】:2010-07-16 14:59:39 【问题描述】:

在使用 ad-hoc 分发(将应用程序作为分包商发送给测试人员或客户)时,是否有办法对您的 android 应用程序进行代码签名(以允许其仅在具有特定 ID 的设备上打开)?

我知道我可以很容易地共享 apk 文件,但如果我不希望其他人在应用程序准备好之前重新分发应用程序怎么办?例如,我不希望测试人员能够分发我的应用程序的未完成和错误版本。或者我想向我的客户展示应用程序的最终版本,但在付款之前不允许他们分发它。

【问题讨论】:

【参考方案1】:

我做了类似的事情。

之前我得到了测试设备的IMEI

然后在 onCreate() 函数上

public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      

String IMEITesterDevice = "1234123535346453634";

 final TelephonyManager  mTelephony =  (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    String AndroidDeviceId = mTelephony.getDeviceId();

if (AndroidDeviceId.contentEquals(IMEITesterDevice ) //Not equal then
 super.finish();  //force to finish my app.
...
...
...

更新:

对于没有电话支持的设备,如平板电脑,使用 TelephonyManager 会得到 null,对于某些设备最好使用 Secure.ANDROID_ID...

String AndroidDeviceId;
final TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//for mobiles
    if (mTelephony.getDeviceId() != null)
        AndroidDeviceId = mTelephony.getDeviceId();
    else // Tablets
        AndroidDeviceId = Secure.getString(
                        getApplicationContext().getContentResolver(),
                        Secure.ANDROID_ID);

【讨论】:

我必须添加 READ_PHONE_STATE 权限,并将比较更改为“!AndroidDeviceId.contentEquals(IMEITesterDevice)”,但总的来说这个想法是正确的,谢谢!顺便说一句,很遗憾,操作系统无法处理这个问题,我们必须在代码中进行这种检查...... 是的,非常重要的 READ_PHONE_STATE 使用 TelephonyManager 类的权限 :),谢谢。

以上是关于Android 应用即席分发和代码签名(检测 UID)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用即席分发和 MDM

与证书和配置文件即席分发混淆

iOS 即席分发

iOS 即席分发更新

Android 新一代多渠道打包神器

如何检测android 文件签名成功(转帖)