Fix read android packages

This commit is contained in:
世界 2022-08-20 00:19:13 +08:00
parent 2de6198696
commit 529224be2d
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
3 changed files with 21 additions and 7 deletions

View file

@ -1,6 +1,7 @@
package tun
import (
"bytes"
"context"
"encoding/xml"
"io"
@ -11,6 +12,7 @@ import (
E "github.com/sagernet/sing/common/exceptions"
"github.com/fsnotify/fsnotify"
"github.com/sagernet/abx-go"
)
type packageManager struct {
@ -97,18 +99,27 @@ func (m *packageManager) SharedPackageByID(id uint32) (string, bool) {
}
func (m *packageManager) updatePackages() error {
packagesData, err := os.ReadFile("/data/system/packages.xml")
if err != nil {
return err
}
var decoder *xml.Decoder
reader, ok := abx.NewReader(bytes.NewReader(packagesData))
if ok {
decoder = xml.NewTokenDecoder(reader)
} else {
decoder = xml.NewDecoder(bytes.NewReader(packagesData))
}
return m.decodePackages(decoder)
}
func (m *packageManager) decodePackages(decoder *xml.Decoder) error {
idByPackage := make(map[string][]uint32)
sharedByPackage := make(map[string]uint32)
packageById := make(map[uint32]string)
sharedById := make(map[uint32]string)
packagesData, err := os.Open("/data/system/packages.xml")
if err != nil {
return err
}
decoder := xml.NewDecoder(packagesData)
var token xml.Token
for {
token, err = decoder.Token()
token, err := decoder.Token()
if err == io.EOF {
break
} else if err != nil {