github.com/adwpc/xmobile@v0.0.0-20231212131043-3f9720cf0e99/gen.go (about) 1 // gen.go 2 package main 3 4 import ( 5 "io/ioutil" 6 "math/rand" 7 "os" 8 "regexp" 9 "strings" 10 "time" 11 ) 12 13 func replace(srcFile, dstFile, prefix string, keyMap []string) { 14 content, err := ioutil.ReadFile(srcFile) 15 if err != nil { 16 panic(err) 17 } 18 s := string(content) 19 for _, key := range keyMap { 20 dstStr := regexpReplace(key, prefix) 21 s = strings.ReplaceAll(s, key, dstStr) 22 } 23 24 f, err := os.Create(dstFile) 25 if err != nil { 26 panic(err) 27 } 28 defer f.Close() 29 _, err = f.WriteString(s) 30 if err != nil { 31 panic(err) 32 } 33 } 34 35 func regexpReplace(str, prefix string) string { 36 re, err := regexp.Compile("go") 37 if err != nil { 38 panic(err) 39 } 40 return re.ReplaceAllString(str, prefix+"_go") 41 } 42 43 func random(length int) string { 44 rand.Seed(time.Now().UnixNano()) 45 chars := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") 46 47 var b strings.Builder 48 for i := 0; i < length; i++ { 49 b.WriteRune(chars[rand.Intn(len(chars))]) 50 } 51 return b.String() 52 } 53 54 func replaceAll() { 55 prefix := random(6) 56 57 replace("bind/java/context_android.c", "bind/java/context_android.c", prefix, []string{"Java_go_Seq_setContext"}) 58 replace("bind/java/Seq.java", "bind/java/Seq.java", prefix, []string{"package go;", "import go.Universe;", "System.loadLibrary(\"gojni\");"}) 59 replace("bind/java/seq_android.c.support", "bind/java/seq_android.c.support", prefix, []string{"Java_go_Seq", "go/Seq"}) 60 replace("bind/java/SeqBench.java", "bind/java/SeqBench.java", prefix, []string{"package go;"}) 61 replace("bind/genjava.go", "bind/genjava.go", prefix, []string{"return \"go\""}) 62 replace("cmd/gobind/gen.go", "cmd/gobind/gen.go", prefix, []string{"\"java\", \"go\""}) 63 replace("cmd/gomobile/bind_androidapp.go", "cmd/gomobile/bind_androidapp.go", prefix, []string{"\"go.\"", "go.**", "\"libgojni.so\""}) 64 } 65 66 func main() { 67 // for java symbol conflix 68 replaceAll() 69 } 70 71 //go:generate go run gen.go