Android 的 APP 能不能实现在启动安装的时候必须要输入 APP 的授权码验证后才能继续安装这样的需求呢,类似哪些需要收费的 Windows 软件,在安装的时候需要输入 KEY 验证之后才能继续安装和使用,本地正版验证的这种。
现在厂家 Android 系统自带的导入证书的功能好像都只是用于 WIFI 认证使用,在非 root 的情况下有没有通用的方法可以将第三方的证书添加到信任 root CA 列表中
在非 root 的情况下有没有通用的方法可以直接修改 hosts 和 3G/4G/5G 也就是数据流量自带的 DNS ,现在实现这种功能的 APP 好像都是通过 VPN 这种间接的模式来处理的感觉太曲折和太别扭。

问题 1. 需求源自 由于 APP 是行业专用的 Android 单机软件(不需要联网使用,类似专用 PDA 上的软件), 但是想实现按设备收费功能所以自然的就想到了 Windows 之前的正版 KEY 方式。
问题 2. 需求源自现在证书费用和的问题(当然有免费的证书,它们的问题就是时间短并且免费证书的类型有限,另外,独立的 APP 也可以用自己的证书验证,但是有的时候需要调用浏览器或者是第三方 APP 这个时候自签证书也就有问题了)所以想自己签发证书

问题 3. 主要是现在有的 APP 广告太多,运营商 DNS 稳定性和隐私性等问题,想有没有办法在不安装第三方软件的情况下去掉广告或者是修改 dns 而已, 也不打算做个啥产品。

1 、安装不行,执行可以。(你看到的任何软件的 CD-KEY ,也都是执行阶段验证的)
3 ,你这是 DNS 劫持,是木马行为。

2 楼主没有描述使用场景,不评价。

  1. win 软件也是装完才运行要 key 的啊,我也没见哪个不买不能安装的
  2. 可以添加 root ca ,不知道是不是国产砍了
  3. 不能

三项加一起你是打算做个付费软件做 Mitm 劫持用户流量吗😅

Windows 的安装程序可以自己做,当然能做到没 key 不能装
Android 安装包都是统一格式,不能自己做,所以你想自定义一些安装逻辑是不行的

inno setup 打包的 windows 应用可以做到安装阶段需要输入密码, 而且安装包里面的资源也是加密的

#4 这也是执行阶段,所谓的安装也是程序业务的 setup 。
windows 、Android 并没有系统级的 CD-KEY 。

“...劫持用户流量.." 不是,主要是我混到一起问了所以容易让人有错误的联想! 现在我已经把需求和原因附注了

”可以添加 root ca ,不知道是不是国产砍了“ 我这边一个老 android 8 的设备 直接没有导入 root ca 只能用来做 wifi 认证, 另外一个 android 版本比较新的设备 倒是有导入 root ca 但是在导入的时候,在自定义证书存放目录选择证书文件的时候根本看不到 ca 证书,我试过几种证书格式都不行

需求和原因我已经附注了

你可以下个 adguard ,试试它的证书能不能用,我也不清楚具体支持啥格式
有些软件不接受用户添加的 ca 证书,还有些连系统的都不认,只认自己内置的(比如 firefox ),不如用 acme.sh 签一个,可以自动续期,倒也不麻烦

改 hosts 必须得 root ,效果一般,国内规则大多误杀严重可以试试 adguard 或者 firefox + ublock origin ,各自都有些缺点

"...改 hosts 必须得 root..." 这个方法行不通,那改 4G/5G 数据上网的默认 dns 的方法呢,哪怕是做一个小 app 通过 android API 的方式修改

Android 9 开始支持 private dns ,可以设置 dot 地址,比如 dns.pub (国产好像也有些阉割了)

没有用过面具吗,看一下人家能产生一个随机包名的 apk 替换自身

“...Android 9 开始支持 private dns...” 那这个 private dns 会覆盖数据方式获取的运营商 DNS 吗,也就算对数据上网也生效吗?

对 wifi 和流量都生效

谢谢指教!

1:要运行后自己做相关逻辑
2:可以,引导用户安装即可
3:有很多系统可以改 dns,例如小米的私人 DNS 功能

想做本地鉴权,apk 安装阶段应该实现不了
真想实现呢,做一个中间过渡的 App (称作 A )做鉴权,和实际的 App (称作 B )。
A 鉴权成功之后给你把鉴权信息包括机器码之类的识别内容加密成 license 写进 B 的 Apk 然后重新签名,然后交给系统安装器安装 B ,B 启动的时候拿 license 本地解密后和你的机器信息校验。

#17 因为跟 Windows 不一样,Windows 里软件安装器也是一个 exe ,装好了的软件也是 exe 。真要实现类似的概念,就只能通过一个 App 去安装另一个 App

第一个一般是执行阶段来验证吧。就算不联网,有个死办法,打包的时候,验证码激活码什么的都写进去。

小伙子,说出你的故事

在非 root 的情况下有没有通用的方法可以直接修改 hosts 和 3G/4G/5G 也就是数据流量自带的 DNS ,现在实现这种功能的 APP 好像都是通过 VPN 这种间接的模式来处理的感觉太曲折和太别扭。

可以自己配置 DoT 服务器

这种应该是新版本的系统才有的功能吧!