Lineage OS 下微信断流问题

断开 Wi-Fi 连接后,经常出现其他 APP 可以正常上网,微信不行的现象,向各位请教下解决方法。

已将微信的电源管理设置为不优化; APN 设置为 CMNET (移动);首选网络类型设置为 LTE Only 。

两部手机( Sony Xperia XZ2 、红米 K20 )都有这个问题,刷的都是官方 Lineage OS 17.1 。

21 条回复    2021-01-08 22:56:19 +08:00
systemcall
    1

systemcall   94 天前

要运行微信 OS,手机 ROM 里要放上相关的 SDK 。不然对微信 OS 支持不好
dexter
    2

dexter   94 天前

哪些 os 相关 sdk?
kokutou
    3

kokutou   94 天前

叹号去了吗?
PhaSelEza
    4

PhaSelEza   94 天前   ❤️ 1

@kokutou 是指 Captive Portal 吗?我都用这个命令关掉了。

adb shell settings put global captive_portal_mode 0

hydraegret
    5

hydraegret   94 天前   ❤️ 1

pixel 上的微信都会比 pc 延迟收到消息,约延迟 1-3 分钟。
Maboroshii
    6

Maboroshii   94 天前 via Android   ❤️ 1

关掉 volte 试试。 我的小米 8 类原生系统都有这个问题。WiFi 回到 4g 会出现 dns 请求发不出去的情况,关掉 volte 就好了
kokutou
    7

kokutou   94 天前 via Android   ❤️ 1

@PhaSelEza
打开换个可以正常使用的服务器
比如小米的
madpecker009
    8

madpecker009   94 天前 via Android

@hydraegret 小米 8 也延迟 不过没你的这么离谱 也就是在 3s 左右
YvanGu
    9

YvanGu   94 天前

华为 EMUI 上微信也延迟,3-5 分钟,电脑端登陆的情况下。
HankAviator
    10

HankAviator   94 天前 via Android   ❤️ 1

米 6 los17.1,未电池优化,play 版微信没有问题。
私人 dns 已关闭。
Lin0936
    11

Lin0936   94 天前

pixel3 上 play 版微信没发现延迟断流,甚至感觉比 iOS 推送还快一点
alfchin
    12

alfchin   94 天前 via iPhone

@YvanGu 那是功能吧。。。
treblex
    13

treblex   94 天前

请问这个 rom,键盘收起之后,下半屏无法点击的 bug 修复了吗
YvanGu
    14

YvanGu   94 天前

@alfchin 额。。。手机端晚于电脑端收到信息有什么有利的功能嘛?
PhaSelEza
    15

PhaSelEza   94 天前

感谢各位的答复。我开启了 Captive Portal (网址设置为谷歌中国),关闭了私人 DNS,关闭了 VOLTE 。现在似乎正常了,我再试用几天。
PhaSelEza
    16

PhaSelEza   94 天前

@suke971219 日常使用中没有遇到这个 bug,有什么可以复现的方法吗?
treblex
    17

treblex   94 天前

@PhaSelEza #16 开发 app 时候遇到的 可能需要做兼容吧,就是比较靠近底部的 input,点击输入再取消就会遇到
bclerdx
    18

bclerdx   94 天前 via Android

@PhaSelEza 你怎么关掉 CaptivePortal 的。
q197
    19

q197   94 天前

@bclerdx adb 执行他写的那段代码
bclerdx
    20

bclerdx   94 天前 via Android

@q197 明白。多谢。
bclerdx
    21

bclerdx   91 天前

@q197 那么 Google Android 原生系统从 5.0-11,Captive Portal 探测的是哪个具体网址或域名呢?

14 年的 Android 手机如何升级系统?

RT,昨晚爸爸拿了一台 14 年产的手机,型号是酷派 V1-C,系统是 Android 4.4.4 的,问我还能不能用?我看了一下配置,处理器是骁龙 801,运存 3G,勉强还可以用。但是因为系统太老,连微信都无法安装,这个手机型号在网上也没找到刷机包,还有救吗?能否有其它办法升级系统? PS:这手机 2K(2560×1440)超清屏,491PPI,wifi 还支持 5G 频段,物理隔离双系统…这些配置和功能挺超前的啊,前几年都还有其它厂商拿来出吹呢…以前酷派这个品牌确实挺火的,现在怎么感觉在垂死边缘了?

第 1 条附言  ·

看了一下各位的建议,好像基本没戏。APP 老版本我尝试过,虽然可以用,但是部分功能模块会出问题。我是准备给他选一个红米的,想着又便宜性能又好,但因为他现在用的是华为(他不懂手机,平常也就玩玩微信,刷刷抖音啥的),问他想要什么手机,他也只知道华为,我又担心如果不给他买华为,他用着出啥问题还得我背锅。
2000 以内的华为手机各位有什么好推荐的吗?
27 条回复    2021-02-07 04:01:03 +08:00
gam2046
    1

gam2046   107 天前

酷派大概率就节哀吧

Android 4 和 Android 7 的 HAL 层有大改,vendor 几乎没有可能直接重用。要不 HAL 层对应的修改,要不该 vendor 。前者工程量巨大,后者你没源码,有也同样有非常大的工程量。

有这精力,还不如买个新的千元机。

ysc3839
    2

ysc3839   107 天前 via Android

801 的话理论上能跑 Android 10 的。比如三星 S5 仍然可以运行基于 Android 10 的 LineageOS 。
但是对于非热门机型那还是别想了,除非你愿意自己适配。
LiYanHong
    3

LiYanHong   107 天前

看看老点版本的微信还能用不咯
hikari2
    4

hikari2   106 天前

早期安卓分为支持安卓 5 和不支持的,支持安卓 5 的基本上都能上 789
gason406
    5

gason406   106 天前   ❤️ 1

当年还在吹中华酷联米的,*后混出来的也就剩华为小米了
ShallowAi
    6

ShallowAi   106 天前 via Android

14 年能解锁 BL 或者预先解锁的安卓机 只要还有人做包那就能升级

酷派啊 早跑路了 基本没人做了 你要是说小米 2s 都还有安卓 10

PhxNirvana
    7

PhxNirvana   106 天前

801 应该是 32 位 cpu,可以放弃了
Lemeng
    8

Lemeng   106 天前

酷派啊,熟悉又陌生的名字
hfJ433
    9

hfJ433   106 天前   ❤️ 6

老丈人的意思想你买部新手机给他,让你表现一下。
a5b6c7d8
    10

a5b6c7d8   106 天前 via Android

1599 软妹币就可以升级吧

hantsy
    11

hantsy   106 天前

太老了,建议 800 块升级红米。
JensenQian
    12

JensenQian   106 天前

14 年的手机还是换个新的吧,现在手机很便宜了,包括 5G 手机,千元以内或者左右都有挺好的选择,
JensenQian
    13

JensenQian   106 天前

@JensenQian #12 这机子翻了下真的没啥包了,我之前小米 4 刷过安卓 10 的魔趣,但是还是卡的不行,基本没法用,801 现在也该退休了,https://www.wandoujia.com/apps/596157/history 豌豆荚有历史版本的微信,*旧的的 5.1 版本的微信,14 年的应该可以装上去
a570295535
    14

a570295535   106 天前

给你个老版本可以正常登录使用的微信,
解压后安装 apk 即可:
https://xsz.lanzous.com/i7iofjoaaqj
noahhhh
    15

noahhhh   106 天前 via Android

买新机吧
fox0001
    16

fox0001   106 天前

掏腰包更新,RMB 大法好~
systemcall
    17

systemcall   106 天前

酷派的可以放弃了,没有厂家的支持哪来的大改动的第三方?
要是是小米 note 也许有戏,也是 801 32 位,官方有新一些的系统
4.4 默认还是 Dalvik 吧,后面都换成 ART 了。系统的结构都差得远。你要是有个安卓 6.0 的原厂固件,倒是有可能改出来新版本系统
CBS
    18

CBS   106 天前

建议给 l 老丈人买个小米 MAX3
miaomiao888
    19

miaomiao888   106 天前

恢复下出厂,6.7.3 的微信包括支付能用,QQ 国际版能用,ZFB 也能用,抖音好像也可以
USAA
    20

USAA   106 天前

百度
V1-C 刷机包
如果有就有,没有就没有
angrylid
    21

angrylid   106 天前 via Android

两千元内华为手机竞争力不强,要不弄台老旗舰,要不荣耀。
dingwen07
    22

dingwen07   106 天前

2000 以内华为手机,如果不包括荣耀,建议不要考虑。
taobibi
    23

taobibi   106 天前

V1-C 这个手机我有同款。当初这个手机叫酷派伯顿(伯爵?)记不清了。
分享一下我的翻车经验
1.这个手机的刷机包止步于 4.4,都是原厂魔改的。没有第三方适配,大概也是双系统的缘故,适配很困难。
2.网上很多刷机包都是 360 定制版本,内置 360 全家桶
3 。有网友发布过去掉安全系统的版本,可以增大存储空间,总之所有系统都是官方安置 4.4 的魔改。老的 CM 也没有适配过。

至于其他用法。我曾经试过把他放在家里转发短信验证码,但是发现这个机器的安全机制很特别,机会任何读短信的 APP 都读不到短信内容,

只有旧货利用的途径,也不是没有
1.这个手机带自动接听功能,可以设置直接自动接听(设置好白名单接听),或者链接蓝牙音箱自动接听,有时候可以放在家里,远程提醒在家的老婆大人给我暖床(划掉)
2.如果你有电信无限流量套餐,可以开热点当个随身路由器用,这是为数不多的支持换电池的手机,电池淘宝依然有售。支持电信 4G 网,热点网速比较理想。

zhhww57
    24

zhhww57   102 天前

VMOS,用 VMOS 模拟高版本 android,或者安装 xposed 的向下兼容模块
DreamingCTW
    25

DreamingCTW   102 天前

@zhhww57 VMOS 不支持 4.4.4 的
amok
    26

amok   74 天前

酷派的旗舰机都不给升级系统的?同期的荣耀 6,配置还不如这个,官方都升 6.0 了。
zhhww57
    27

zhhww57   62 天前

那就试试看移植到 android5 或者 android6,然后再用 vmos

安卓监听端口能让局域网的其他设备实时访问吗?

试过用 SSHDroid 把 Android 当成 SSH 服务,但电脑有时候能通过 ssh 访问安卓,有时候不能访问。
安卓有休眠机制,但网络会休眠吗? 22 端口有访问的时候不能唤醒设备吗?

或者自己在安卓上弄一个 ftp 服务器监听 21 端口,能让 21 端口实时访问吗?同时又希望在长期没有其他设备访问的时候又基本不增加耗电。

10 条回复    2021-01-09 00:30:06 +08:00
linhua
    1

linhua   92 天前

国产安卓系统会限制后台程序的运行,在应用程序设置里 设置成 不限制 就可以了。
小米的是在 应用设置–省点策略 里,如果设置成 智能限制后台运行,则不接电源,过一会就不能访问,如果接通电源,则一直可访问。 设置成 无限制,不管是否接通电源,始终可访问。
zictos
    2

zictos   92 天前

@linhua #1
我是三星的,已经把 SSHDroid 设为自动运行,取消电池优化以及取消手机自带的省电。
我其他需要保持后台运行的软件都是这么设置的,像 tasker 都可以保持长期后台运行。

但我发现 SSHDroid 其实并不需要后台,他运行的时候在进程看到实际是运行了一个 shell 脚本,即便把 SSHDroid 的后台关掉或者强制结束,但 ssh 服务依然可用,只是屏幕关掉一段时间后就很可能无法连接了,屏幕开启后不需要再次启动又能直接连接。

zictos
    3

zictos   92 天前

@linhua #1 很多后台运行的程序也会休眠的,需要自己定时唤醒,所以做不到实时
tanranran
    4

tanranran   92 天前

root 后把应用转为系统应用
Jirajine
    5

Jirajine   92 天前

和应用后台没关系吧。adbd 是系统进程,我用 adb shell,手机息屏以后反应也非常慢,亮屏才能恢复正常。应该与 Android 内核专门的调度有关。
zictos
    6

zictos   92 天前

@tanranran #4 如果是自己运行 shell 脚本是只需要把 shell 脚本移到 /system/bin 目录下吗?
试了用幸运破解器把 SSHDroid 移到系统目录,实际只是把 apk 移到了 /system/priv-app 下,但 data/data 下的数据还在原来的地方,而 SSHDroid 默认是会启动 data/data 下的 shell 脚本,即便程序退出了脚本还会运行
zictos
    7

zictos   92 天前

@Jirajine #5 我倒不是慢,而是有时候根本连不上。
linhua
    8

linhua   92 天前

我用的 SSHelper
zictos
    9

zictos   92 天前

@linhua #8 其实仔细想了想也没什么远程需求,用 adb 网络调试也行。
我现在好像可以后台运行 shell 脚本和 python 脚本了,也没必要用 SSHDroid 了。像下面这样就行:
setsid ./test.sh &

试着用 python 开了一个 tcp 长连接,每隔几秒就向服务器发一条消息,这样手机居然不会休眠,没有获取唤醒锁,服务器一直可以收到消息。
还有一个 ftp 服务器监听 21 端口,不知道会不会增加耗电,不知道会不会影响手机休眠

systemcall
    10

systemcall   91 天前 via Android

@zictos /system 默认情况下是只读的,所以即便是系统应用,数据也在 /data 下。但是系统应用在早期版本的安卓有很高的权限,*近的几个大版本虽然没那么高的权限了但还是有些地方比用户应用权限高
脚本放在 /data 没问题,/system/bin 里面不应该放自己的脚本吧,虽然放进去好像也没多大问题
要开机启动,直接改 Linux 层的启动脚本就行了

Android 线程间通信全部用广播,有什么坏处吗?

感觉广播比 Handler 方便多了,直接就 send,不用先传个实例才能回话

8 条回复    2021-01-08 10:38:47 +08:00
MaL
    1

MaL   92 天前 via Android

如果是一般广播的话,那就太重了,可以用本地广播或 eventbus
Helsing
    2

Helsing   92 天前 via iPhone

尽量少用吧,要不*后到处都是满天飞的广播,看的头大
towry
    3

towry   92 天前

不要只考虑写的时候有多爽,要考虑以后容不容易修改 /调试
wolegequ
    4

wolegequ   92 天前

能用就行,产品有人用再说. 某宝的 app 卡成翔也没见他们优化
kop1989
    5

kop1989   92 天前

软件开发层面就是不好维护。
广播相当于是一个低耦合链接。
假设你有需求要修改某个广播的信息格式或者传参数量。
这时候编译器帮不了你,你很难确认你发送端和接收端都改对了 /改全了。只能不断的测试。

而且细节处理不好还会有安全性问题。

k10ndike
    6

k10ndike   92 天前   ❤️ 1

可以用 LiveData
jinhan13789991
    7

jinhan13789991   92 天前

我目前是维护很多 LiveData,说白了就是另一种广播。
只不过发送和订阅都抽成了独立的接口。优点就是不会混乱,缺点就是每次有新的需求就要再写一个专门的方法。
后面在考虑抽成一个通用的方法,通过枚举保证唯一。
BrokenVns
    8

BrokenVns   92 天前   ❤️ 2

广播是基于异步 binder 的,异步 binder 存在以下小问题:
1.能够传递的数据量是同步 binder 的一半( 0.5M-4K ).
2.异步 binder 的消息传递优先级不高,可能会出现广播接收延迟问题,这种现象在 binder 流量大的老机器更明显。
3.你不知道异步 binder 传递是否成功了,碰到过通信失败而引发的 ANR 问题。
广播自身也有些小问题,比如广播要先发送给 AMS 再由 AMS 进行分发,跨了两次进程,广播是透明的等。

少量使用动态广播,可以减少开发量。
大量使用异步通信的话,还是建议使用 Looper-Handler 、开源库或者造轮子

Activity 为什么要有 onStart 生命周期?

Activity 为什么要有 onStart 生命周期? 直接用 onResume 不行吗?

两个 Activity 切换时, 它们的生命周期顺序是

… A#onPause B#onCreate B#onStart B#onResume A#onStop …

这样安排顺序我能理解, 在 A 显示的时候让 B 显示, B 完全展示后, A 走 onStop, 这样用户界面不会黑屏.

但有个疑问, B Activity 展示的回调中为什么要多一个 onStart, 直接通知正在展示的 Activity onRESUME 不行吗

8 条回复    2021-01-15 14:13:56 +08:00
also24
    1

also24   92 天前

我觉得谷歌是希望能严格区分 onPause() 和 onStop() 的。

所以对应着搞了 onResume() 和 onStart() 作为对应的恢复状态。

实际上 Google 确实专门讲了 onPause() 和 onStop() 的差异:
https://developer.android.com/guide/components/activities/activity-lifecycle

janus77
    2

janus77   92 天前 via iPhone

onresume 是 ui 渲染了,有些特殊的需求是希望在渲染之前执行,或者在进入后台(不渲染)的时候扔会执行。所以就需要 onstart 和 onstop
RikkaW
    3

RikkaW   92 天前   ❤️ 5

分屏、画中画等等屏幕上不止一个 Activity (窗口)的情况下就是只有处于焦点的那个是 resumed 状态,其他的都是 started 状态。
zagfai
    4

zagfai   92 天前   ❤️ 1

Android 给开发者制定的架构就是一坨翔
rosu
    5

rosu   92 天前 via Android

start 是可见,resume 是焦点。
narutow
    6

narutow   92 天前

@RikkaW 感谢, 理解了, onStart 和 onRESUME 就是界面可见 和 获得焦点可以同用户交互 的两个回调. 其他比如多窗口可以看到, 但不能交互的情况, Activity 就处于 onPause
kraits
    7

kraits   92 天前 via Android   ❤️ 1

楼主有没有考虑到 Activity 横竖屏切换的生命周期:

onSaveInstanceState()→onPause()→onStop()→onDestroy()→onCreate()→onStart()→onRestoreInstanceState()→onResume()

fromzero
    8

fromzero   85 天前

onStart onRestart 都是满有用的。

关于 kotlin 协程 lifecycleScope 用法和内存泄漏的问题

在随便一个 Activity 上启动此 Activity,然后迅速关闭,leakcanary 就会报内存泄漏。引用链包括了传入的第二个参数 lambda 对象和 Okhttpclient,这里泄漏的原因是什么呢? 一般 retrofit 或者 okhttpclient 对象全局只需要一个就行了吧, 如果还是需要传参和传回调的方式访问网络,该如何正确修改下面的代码呢?

class TestActivity:AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test)
        requestBylifecycleCoroutine("https://www.baidu1.com/"){
            Log.w("TestActivityTAG","result:"+it)
        }
    }

    val client = OkHttpClient.Builder().build()
    fun requestBylifecycleCoroutine(url: String, callBack: (s: String) -> Unit) {
        lifecycleScope.launch {
            val result = withContext(Dispatchers.IO) {
                suspendCoroutine<String> { continuation ->
                    val request = Request.Builder().url(url).build()
                    val newCall = client.newCall(request)
                    newCall.enqueue(object : Callback {
                        override fun onFailure(call: Call, e: IOException) {
                            continuation.resume("fail")
                        }
                        override fun onResponse(call: Call, response: Response) {
                            continuation.resume("success")
                        }
                    })
                }
            }
            callBack(result)
        }
    }
}

21 条回复    2021-01-13 10:25:26 +08:00
lianyue13
    1

lianyue13   92 天前

协程取消的时候,请求没取消吧。用 suspendCancellableCoroutine,在 cancel 里把请求取消试试
m30102
    2

m30102   92 天前

@lianyue13 我换了 suspendCancellableCoroutine, 也在 invokeOnCancellation 添加了 call.cancel(). 和之前一样,leakcanary 还是会有 x retained objects,tap to dump heap,不过很快通知就变成了 All retained objects were garbage collected . 这样是为什呢,我还需要担心吗?
k10ndike
    3

k10ndike   92 天前

@m30102 OKHttpClient 对象是 Activity 持有的么?
hlayk
    4

hlayk   92 天前

如果在 viewmodel 中使用对应的 viewModelScope 那么携程 launch 返回的 job 会由 viewmodel 的 onCleared 统一自动 cancel
你在 activity 中这样使用 lifecycleScope 可以在 onDestory() 将 lifecycleScope.launch {} 返回的对象 job 主动取消下

[Easy Coroutines in Android: viewModelScope]( https://medium.com/androiddevelopers/easy-coroutines-in-android-viewmodelscope-25bffb605471)

m30102
    5

m30102   92 天前

@k10ndike OKHttpClient 对象就算写在其他类中,同样是单例的话, 也会间接持有到 activity
m30102
    6

m30102   92 天前

@hlayk 如果还需要考虑 onDestory,那么 lifecycleScope 就不用叫 lifefcycleScope 了。实际上 lifefcycleScope 也确实自动 cancel 了,*终的 callBack 没有执行。但是网络请求不一定能成功 cancel,而且回调时间较长,leakcanary 不知为什么显示引用到了 activity 。 如果替换为 viewModelScope 也有效,有时候一个页面就一个网络请求懒得再写一个类直接在 activity 中请求网络,这样貌似 无解?
k10ndike
    7

k10ndike   92 天前

@m30102 呃,Activity 怎么间接持有到的?有测试过吗,创建一个类里面就一个静态的 OkHttpClient 实例
vanxy
    8

vanxy   92 天前 via iPad

你这个等于用了一半的协程,用错了
应该同步地在协程里调用 okhttp,而不是通过回调 callback 的方式

直接 newCall.execute() 拿到 response

m30102
    9

m30102   92 天前

@vanxy 同步的我试了,还是一样。同步的话只是自动取消协程,但是 call.execute()方法开始执行后并不会立即取消。
m30102
    10

m30102   92 天前

@k10ndike 测试过, static 的 OkHttpClient *终会通过 activity 中传入的 lambda 回调,引用到 activity
vanxy
    11

vanxy   91 天前 via iPad

@m30102 你需要在 execute 外面包一个 withContext,这样当 activity finish 了,就不会执行接下来的代码了
sankemao
    12

sankemao   91 天前

我觉得应该是 callback 持有了 activity 的引用,可以试试把结果传给 livedata
m30102
    13

m30102   91 天前

@vanxy 是的,我有用 withContext. 无论是 execute 还是 enqueue ,activity finish 后传的 callback 不会执行,但是 okhttp 的 call 还是会执行的。
m30102
    14

m30102   91 天前

@sankemao liveData 一般配合 viewmodel 用吧,难道非得 mvp 或者 mvvm 把 activity 完全隔开才行吗。。。。
sankemao
    15

sankemao   91 天前 via iPhone

@m30102 你可以在 ac 里面用 livedata 验证下是否还有泄漏。你也可以用其他办法
vanxy
    16

vanxy   91 天前

@m30102 #13 那是自然地呀,call 是一整段的阻塞式调用。 不止是协程, 实际上没有任何方式可以取消它(除非强制停止线程),协程只是可以帮你在取消 withContext 之后的所有代码执行。

因为不执行接下来的 callback 了, 所以 activity 也不会内存泄露了。 也不需要关心 execute 是否执行完成

m30102
    17

m30102   91 天前

@vanxy 我反编译了半天对比了下找到原因了, 是 okhttpclient 的原因,activity 虽然执行 destory 了,但是 okhttpclient 还在执行 call,所以延长了 activity 生命,报泄漏。如果把 okhttpclient 写在其他类中声明 static, 那么 activity 中调用协程方法传的 callBack 必须不能引用 activity 任何成员变量或者 view 等,不然还是会被延长生命,一般传回调就是为了改变 view 等,所以这个是无解的!
vanxy
    18

vanxy   91 天前

@m30102 #17
哦哦, 因为 kotlin 的 lambda 持有了 activity 的引用。

所以要把执行的放到 viewmodel 或者 presenter 里,activity 解除与 viewmodel 或者 presenter 之间的引用之后, 就不会造成泄露了

k10ndike
    19

k10ndike   91 天前 via Android

@m30102 你本地的代码应该有其他操作吧,帖子里那样打 Log 应该不会泄露。可以在请求 callback 里调用 livedata,就不用处理生命周期了
xhpan10
    20

xhpan10   88 天前

协程的代码没有 rxjava 的好看
DiDiz
    21

DiDiz   87 天前

@xhpan10 也要封装的,封装好了协程代码就和普通同步代码一样。相比之下 rxjava 就显得很啰嗦了

安卓内置存储默认加密 会导致刷机后数据无法读取吗?

据说现在安卓都是默认加密的了。昨天给一部备用机刷机,里面的一些数据都看不到了。

我只是用 TWRP Recovery 清除了系统和缓存分区以及 /data 下面的数据,twrp 默认会跳过“个人内置存储空间 /sdcard”的。刷机时也没勾选“重新分区”和“擦除数据”,以前刷过都不会清除“内置存储空间”的数据。

感觉就只有这个原因了,不然随便刷机就能查看数据的话,那加密就没有意义了。 不过我不知道是否真的存在加密,只是听说现在都默认加密而已。如果真的是这样的话,那数据还有办法恢复吗?

7 条回复    2021-01-11 09:30:06 +08:00
cheng6563
    1

cheng6563   90 天前 via Android   ❤️ 1

twrp 能解密读写数据的,不过要输入密码。你那 twrp 兼容性没做好吧。
zictos
    2

zictos   90 天前

@cheng6563 #1 twrp 备份时根本就无法备份内置存储空间,特意排除了内置存储空间,不然的话我就会一起备份,等于是刚好没有备份的地方就出问题了,幸好是备用机,不过上面也有一些有用的数据。
估计是可能很多人默认就会把备份的文件保存在内置存储空间。而实际上我是备份到额外的 tf 卡,为了省事就没把内置存储的文件复制到 tf 卡。

twrp 的解密原理是什么呢?比如你手机本来是设为手势解锁或指纹解锁,那 twrp 也能手势解锁或指纹解锁吗?

1041412569
    3

1041412569   90 天前 via Android

@zictos 对,不过一般是用手势九宫格对应的数字密码解锁。0-9
datou
    4

datou   89 天前

15 年的 Android M 开始就默认加密了呀
youla
    5

youla   89 天前 via Android

Twrp 不是有一项 强制移除 data 加密 吗?执行一下这个选项就可以了
jim9606
    6

jim9606   89 天前

TWRP FAQ 有解释为啥没法支持( https://twrp.me/faq/encryptionsupport.html),概括一下就是通常要求厂商专有blob 支持,或者缺乏 OEM 文档支持,没法加进项目里。不过删除数据还是可以做到的。
AoEiuV020
    7

AoEiuV020   89 天前

现在 TWRP 发布的时候都会特地声明是否支持解密 data 了,不同刷机包换着刷经常需要格式化 data 分区去除加密,

安卓有专业靠谱的数据恢复软件吗?

看了一下手机端的 app 基本都是鸡肋,稍微可信一点的一般都是 windows 上的软件,通过 usb 调试连接手机进行操作(借助 adb 和 root )。

看到一款 gihosoft android data recovery 好像有点可信,扫描文件也能扫描到很多。但是似乎只能恢复照片、视频、音乐、通讯录、短信、whatsapp 、txt 和 doc 之类的文档。难道没有基于整个存储介质的文件系统的任意文件的恢复吗?类似于电脑上的 diskgenius

7 条回复    2021-01-12 09:31:00 +08:00
zictos
    1

zictos   89 天前   ❤️ 2

已解决,root 后用 dd 命令把 /data 分区的所有内容保存为 img 镜像文件(如没有 dd 命令可通过安装 busybox 或者 termux 后获得)。
获得 img 文件后就可以用电脑上的专业数据恢复软件(比如 R-STUDIO 或 diskgenius )读取并恢复。

https://android.stackexchange.com/questions/208106/how-to-recover-a-deleted-file-from-data-partition

settoo
    2

settoo   89 天前 via Android

可惜 root 对华为手机来说就是没门
zictos
    3

zictos   89 天前

@settoo #2 淘宝上都可以解锁啊,具体可以搜“华为 root”
settoo
    4

settoo   89 天前 via Android

@zictos 记得去年我咨询过好多店,麒麟 970 以后都不能解锁,不知道今年第三方技术是不是进步
zictos
    5

zictos   89 天前

@settoo #4 我也不知道是否真的可以,具体你可以再咨询下
yysiman
    6

yysiman   88 天前

你都 root 为啥还整那么复杂,直接用 twrp 或者钛备份啊
zictos
    7

zictos   88 天前

@yysiman #6 是恢复已格式化的分区或者误删的文件

有用安卓 termux 的吗?

1 、root 搞不定,明明手机 root 了,但安装 pkg install tsu 后提示没 root 。直接输入 su 命令可以获取 root 权限,但 termux 自带的命令基本都用不了了。

2 、外置 sd 卡权限无法获取,据说本来就没办法获取。内置 sd 卡似乎也有很多权限问题,不知道 root 后会不会好点,有时候莫名其妙提示权限问题,chmod 也失败。其他程序就基本没见过权限问题,另一个 app“终端模拟器”就能直接获取 root 权限,另外也没见过其他权限问题。

3 、tasker 调用方面也没试,看了下有个 termux-tasker 的 app 好像是收费的,付费后也不知道能不能成功使用。

4 、很多问题在英文网站也有一些遇到同样的情况的,但大都不了了之。主要是想用 termux 里面的 python,感觉 python 很多包都可以直接 pip 安装,挺不错的,之前用 qpython 就很多包都用不了。

26 条回复    2021-03-10 15:11:51 +08:00
marczhao
    1

marczhao   97 天前 via iPhone

1. tsu 没问题(s9,Android 10,magisk)
2-4.没试过
Ayahuasec
    2

Ayahuasec   97 天前   ❤️ 1

tsu 不兼容但是可以直接用 su 的话,你重新设置一下环境变量好像所有命令就都能用了。
如果没有开低端口的需求的话,可以不用 root,可以 termux 里按一个 proot 的 debian 或者 centos,然后在 proot 里面折腾,可以避免很多因为环境依赖所引起的问题,毕竟这样像 WSL 一样相当于一个完整的 Linux 子系统。
Internal Storage 的话给了应用权限以后,还要在 termux 里面运行 termux-setup-storage 获取权限和设置路径,之后在~/storage/shared/目录里面访问。External Storage 好像是 root 了以后在 /storage 还是 /sdcard 里面,不过外置 sd 卡我也没试过,你可以找找看。
zictos
    3

zictos   97 天前

@marczhao #1 那可能系统问题,看来我得刷机升级系统后再试试
systemcall
    4

systemcall   97 天前   ❤️ 1

装个 tmoe,里面装个 ubuntu,连 root 都不用,电视上面都跑得了
没什么别的需求的话,不要用内置 SD 卡。内置 SD 卡现在是虚拟出来的,本来就不太能支持权限的设置。而且性能低
TypeError
    5

TypeError   97 天前 via Android

调用 tasker 没任何问题,我弄了个脚本组合 YouTube-dl 和 you-get,分享链接就能下载各个网站视频
zictos
    6

zictos   97 天前

@Ayahuasec #2
@systemcall #4
不 root 的话就算装 linux 应该也操作不了系统文件,那些能操作安卓系统的命令也用不了,只能在装的 linux 的内部用。一般有哪些作用呢?感觉这样的话就像远程 linux 服务器一样。如果是在后台跑原生 linux 程序应该比较耗电吧?

一般安卓内部 sd 卡是指的 /storage/emulated/0/, 很多程序都会把一些占空间比较大的数据保存到这里,默认就有访问权限。但 termux 好像只有专门的目录才有完全的权限,不知道为什么跟其他程序不一样。外置 sd 卡有的在 /storage/extSdcard/ 下面,这个就是额外插入的外置存储卡

zictos
    7

zictos   97 天前

@TypeError #5 是用“termux-tasker”让 tasker 调用的吗?应该没其他方案了吧!
ysc3839
    8

ysc3839   97 天前 via Android

@zictos 我建议不要用“内置 SD 卡”这个称呼,我的惯用称呼是“共享存储空间”。从 Android 6 开始,需要授权存储空间权限才能访问的。

你说的“只有专门的目录才有完全的权限”,应该指的是应用程序的私有存储空间,这个才是无需授权即可访问的,同时也是每个应用独立隔离的。

zictos
    9

zictos   97 天前

▃▃▃▃
通过添加环境变量的办法非常好用,非常感谢 @Ayahuasec 。
只要添加环境变量之后就可以完全无视 termux 了,termux 自带的一些 linux 命令(没有的命令也可以安装)以及 python 都可以直接去“终端模拟器”或者 tasker 中运行了,并且 termux 不需要后台运行。
▃▃▃▃
只是安卓目前只能临时添加环境命令,每次启动终端都需要设置一下环境变量,暂时没找到永久的办法。
目前这样操作,在根目录 /新建一个 path 的文件,输入下面的两行内容:
export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets:$PATH
export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib
▃▃▃▃
以后只需要在 root 权限下在终端中输入. /path 就可以直接添加环境变量了,注意有个点以及一个空格,代表执行根目录下的 path 文件。“终端模拟器”也可以设置启动时自动执行. /path,这样只要一启动就默认添加上环境变量了,直接输入 python 之类的命令就可以运行 python 了。
.
.
.
.
.
▃▃▃▃
①tasker 调用:添加任务,选择代码–运行外壳(勾选使用 root ),输入类似下面的代码就可以执行 python 文件:
. /path #添加环境变量
python test.py #运行名为 test.py 的 python 脚本

▃▃▃▃
②tasker 中不使用 py 文件的情况下直接运行多行 python 代码:添加任务,选择代码–运行外壳(勾选使用 root,可选择将输出保存到变量),在三引号内输入类似下面的代码就可以直接执行多行 python 代码:
. /path
python -c ”’
a=1
b=2
c=a+b
print(c)
”’
▃▃▃▃
③像上面那样直接写对于偶尔调用下比较方便,if 或复杂的循环逻辑都可以写到里面,只是比较容易出错。我刚 windows 输入后粘贴过去就报错,可能是换行符的问题,手动输入就没问题。

zictos
    10

zictos   97 天前

@ysc3839 #8 只是“共享存储空间”一般更难让人理解吧,除非安卓开发者才能一下子就知道什么意思。嗯,的确是需要授权,只是一般都会同意授权的,所以我才说默认能访问。的确我看了下 termux 好像默认是没有申请共享存储空间权限的,有一条命令可以设置,但设置后权限好像有时有用,有事没用,也不知道到底怎么回事。现在好了,可以完全无视 termux 了,具体见 9 楼,我提的几个问题也都完全解决了
3dwelcome
    11

3dwelcome   97 天前 via Android

sdcard 没权限的,这是安卓限制,不是 termux 的缺陷。
用 termux-setup-storage 可以正常访问读写 sd 。
root 的话,我一般用 proot,因为手机不想越狱。但好像 root 的手机用也没问题,正常访问 /data 系统目录。
zictos
    12

zictos   97 天前

@3dwelcome #11 你说的 sdcard 是指自己插的外置内存卡吗?这个默认没权限,但可以手动授权的,大部分 app 在没权限的时候都会提示需要手动授权,也就是会弹出系统界面,然后选择内存卡的根目录就是授权了。但是 termux 却根本不会弹出任何要求授权的提示
codehz
    13

codehz   96 天前

@zictos #12 termux-setup-storage 会弹框啊(不过要先装 api 那个(
zictos
    14

zictos   96 天前

@codehz #13 termux-setup-storage 是获取自带存储的权限,但自己插的内存卡是不会弹窗让授予权限的
icelo
    15

icelo   96 天前

死在了 root
3dwelcome
    16

3dwelcome   96 天前 via Android

我和 14 楼一样,termux 能正常读写 sdcard,也就是自己插的 tf 卡。
可能楼主不行吧,不能说所有人都不行。
3dwelcome
    17

3dwelcome   96 天前 via Android

和 13 楼一样,有提示。
zictos
    18

zictos   96 天前

@3dwelcome #17 一般弹窗仅仅允许的话应该是允许内置 sd 卡权限,但自己插的卡是 app 弹出提示后需要到系统的资源管理器页面选中插的 tf 卡才可以的,反正我的手机所有 app 都是这样的,哪怕有 root 权限也默认不能访问自己插的卡。
不过反正现在我无所谓了,直接无视 termux 了,具体见 9 楼
3dwelcome
    19

3dwelcome   96 天前

@zictos 我觉得还是你搞错了,你 google 一下 termux-setup-storage,官方是这个页面 https://wiki.termux.com/wiki/Termux-setup-storage,很明确的写着~/storage/external = external storage, 肯定不是内置 sd 卡权限。

内置的叫 internal storage, 外置的叫 external storage,termux 支持的是后者。

zictos
    20

zictos   96 天前

@3dwelcome #19 那个网页的确是说会在外部存储卡创建一个文件夹,并且~/storage/external 是通过 Symlink 符号链接指向那个外部存储卡中创建的文件夹。但我的手机上实际并没创建,使用 cd ~/storage/external 提示不存在目录。

而且不明白为什么要搞什么复杂呢?直接用完整路径访问外部存储卡岂不是更方便?言下之意是不是说就算真的在那个外部存储卡创建了一个文件夹,那也只有那个创建的文件夹才能访问,外部存储卡的其他文件夹无法访问吧?

3dwelcome
    21

3dwelcome   96 天前

我这里是可以顺利访问读取 TF 卡上的所有外部文件,好像正常 APP 只要获得授权后,都能访问吧,没你想的那么复杂。
3dwelcome
    22

3dwelcome   96 天前

我的权限问题,是 TF 卡上不能把 elf 设置成可执行权限。这点好像其他 APP 也不可以,只能单纯当个外置存储盘来读写。
zictos
    23

zictos   96 天前

@3dwelcome #21 正常 app 获得授权是都可以访问的,只是 termux 跟正常 app 的授权方式不一样。我不知道你的手机是怎么给正常 app 授权的,是弹出一个系统的资源管理器,然后在资源管理器中选中 tf 卡吗?我的手机都是这样的。但 termux 并没弹出系统的资源管理器,如果不用弹就能授权,那其他 app 又何必弹出呢。

并且我前几天看到一个网页好像是说 termux 无法获取 tf 卡的权限,大致意思就是说是什么单纯命令行程序无法获取 tf 卡的权限,只有正常的界面的程序才可以获取,但“终端模拟器”也属于命令行程序,它照样可以获取 tf 卡的权限。

3dwelcome
    24

3dwelcome   96 天前

那可能是 termux 没完美兼容你的手机。
我是 termux 的老用户了,android7.0 安装过,android5.0(root)安装过,android10.0 安装过,华为平板的 android9.0 也安装过,基本上没出过什么大问题,就按照官方的教程来,termux-API 都能调用。
很早以前,termux 老版本会有一些奇怪的问题,需要手动安装一些 deb 软件。升级到新版后,这个问题就消失了。
fox0001
    25

fox0001   37 天前 via Android

一直都在 Lineage OS 上跑 termux,木有楼主的问题。另外,从 F-Droid 下载,termux 全家桶都是免费的
imgbed
    26

imgbed   31 天前

安卓有这个: https://m3w.cn/wyspxz

为什么有些 app 体积安装包这么少 0.6m, 1m?

为什么有些 app 体积安装包 这么少, 0.6m, 1m, 我原生打包个 hello world 也 3m , 那是怎么做到的?

补充: 我说少于 1m 的 app, 例如,某 X 浏览器

18 条回复    2021-01-12 15:18:57 +08:00
manami
    1

manami   89 天前

emm 套壳浏览器……
codehz
    2

codehz   89 天前   ❤️ 1

很简单,不要引用奇怪的库,包括 as 生成项目时自带的那些
en20
    3

en20   89 天前

一个是因为本身没多少代码,还有 apk 可以直接打包对应平台 android-arm,android-arm64,android-x64,一个 fat apk 17.9MB,拆分后只有 6.4MB
howellz
    4

howellz   89 天前

@en20 hello world 有啥 native 的包和库?
divilkcvf
    5

divilkcvf   89 天前

appcompat 这种乱七八糟的兼容库全都去掉
joyhub2140
    6

joyhub2140   89 天前   ❤️ 1

生产环境包为了混淆代码会对代码压缩的,你应该打的是 debug 用途的包吧。

另外,正如楼上所说,去掉乱七八糟的库,只用*基本的 activity,layout 里只有一个 LinearLayout,肯定可以降到 1M 以下。

那个 x 浏览器,也就套个系统自带的 webview 而已,内核不是重新开发的。

nicocho
    7

nicocho   89 天前

我看拼 DD 的 android 包只有 30 多 M,
应该不是网络 down 对应的 so 之类的,因为安装完就是上百 M 了。
压缩效率高?有空深入研究研究去。
jinhan13789991
    8

jinhan13789991   89 天前

去掉乱七八糟的库,只能运行的话,其实只要上百 KB 就够了。
很多 app 依赖内容都是*次启动后下载加载的。这样安装包体积就能小很多了
Kamiyu0087
    9

Kamiyu0087   88 天前

原生 Hello World 会引用 material 相关库吧,这就不小了已经
love
    10

love   88 天前

我给我的 WebApp 写了个*简单只有一个 webview 控件的 apk,没任何别的第三方组件,用官方工具套件编译出来也要 2.3M
android 开发我不熟,可能有办法去掉所有可选的东西?
winterbells
    11

winterbells   88 天前 via Android

打 release 包
john6lq
    12

john6lq   88 天前 via iPhone

@divilkcvf 先做再说。helloworld 现在 AndroidX 我*低也就只能优化到 700k 左右。
john6lq
    13

john6lq   88 天前 via iPhone

谷歌瞎 jb 维护,flutter 一个包直接搞定。
maokabc
    14

maokabc   88 天前 via Android

现在不清楚,以前试过,没兼容库,创建 apk 自己写 shell 命令,javac 编译成 class,dx 生成 classes.dex,aapt 处理资源,然后用 zip 打包再签名,app 写完也才 290 多 k 。
iriyave
    15

iriyave   88 天前 via Android

因为华为手机的文件管理器没有 ftp 功能,前几天下了个 ftp 服务器的 app,能在电脑端操作文件,大小只有 0.4M 。
coolesting
    16

coolesting   88 天前 via Android

@iriyave 有一个记事本的 App,安装完才 200 多 K 。。。。
HangoX
    17

HangoX   88 天前

不用 support 兼容包,只要自己代码,混淆深一点,接入 andRes
Rekkles
    18

Rekkles   88 天前

%title插图%num 十年前的 Symbian S40 可是连大于 1M 的软件都跑不起来