| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright 2015 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package main
- import (
- "encoding/xml"
- "errors"
- "fmt"
- "html/template"
- )
- type manifestXML struct {
- Activity activityXML `xml:"application>activity"`
- }
- type activityXML struct {
- Name string `xml:"name,attr"`
- MetaData []metaDataXML `xml:"meta-data"`
- }
- type metaDataXML struct {
- Name string `xml:"name,attr"`
- Value string `xml:"value,attr"`
- }
- // manifestLibName parses the AndroidManifest.xml and finds the library
- // name of the NativeActivity.
- func manifestLibName(data []byte) (string, error) {
- manifest := new(manifestXML)
- if err := xml.Unmarshal(data, manifest); err != nil {
- return "", err
- }
- if manifest.Activity.Name != "org.golang.app.GoNativeActivity" {
- return "", fmt.Errorf("can only build an .apk for GoNativeActivity, not %q", manifest.Activity.Name)
- }
- libName := ""
- for _, md := range manifest.Activity.MetaData {
- if md.Name == "android.app.lib_name" {
- libName = md.Value
- break
- }
- }
- if libName == "" {
- return "", errors.New("AndroidManifest.xml missing meta-data android.app.lib_name")
- }
- return libName, nil
- }
- type manifestTmplData struct {
- JavaPkgPath string
- Name string
- LibName string
- }
- var manifestTmpl = template.Must(template.New("manifest").Parse(`
- <manifest
- xmlns:android="http://schemas.android.com/apk/res/android"
- package="{{.JavaPkgPath}}"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:label="{{.Name}}" android:debuggable="true">
- <activity android:name="org.golang.app.GoNativeActivity"
- android:label="{{.Name}}"
- android:configChanges="orientation|keyboardHidden">
- <meta-data android:name="android.app.lib_name" android:value="{{.LibName}}" />
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>`))
|