func parseIconName(doc *etree.Document) ([]icon, error) {
	man := doc.SelectElement("manifest")
	if man == nil {
		return nil, fmt.Errorf("key 'manifest' not found in AndroidManifest.xml")
	}
	app := man.SelectElement("application")
	if app == nil {
		return nil, fmt.Errorf("key 'application' not found in AndroidManifest.xml")
	}
	ic := app.SelectAttr("android:icon")
	if ic == nil {
		return nil, fmt.Errorf("attribute 'android:icon' not found in AndroidManifest.xml")
	}
	iconPathParts := strings.Split(strings.TrimPrefix(ic.Value, "@"), "/")
	if len(iconPathParts) != 2 {
		return nil, fmt.Errorf("unsupported icon key (%s)", ic.Value)
	}
	return []icon{{
		prefix:       iconPathParts[0],
		fileNameBase: iconPathParts[1],
	}}, nil
}
parseIconName fetches icon name from AndroidManifest.xml.
package android
import (
	"fmt"
	"path/filepath"
	"regexp"
	"strings"
	"github.com/beevik/etree"
	"github.com/bitrise-io/bitrise-init/analytics"
	"github.com/bitrise-io/bitrise-init/models"
	"github.com/bitrise-io/bitrise-init/utility"
	"github.com/bitrise-io/go-utils/log"
	"github.com/bitrise-io/go-utils/sliceutil"
)
type icon struct {
	prefix       string
	fileNameBase string
}
func lookupIconName(manifestPth string) ([]icon, error) {
	doc := etree.NewDocument()
	if err := doc.ReadFromFile(manifestPth); err != nil {
		return nil, err
	}
	log.Debugf("Looking for app icons. Manifest path: %s", manifestPth)
	return parseIconName(doc)
}