- 动态库命名规则:lib<包名>.so
- 基于gomobile的ca3c58166ed802c9810ffc499b01bc1cd2e0153a commit进行修改
- 修改文件:
${GOPATH}/src/golang.org/x/mobile/cmd/gomobile/bind_androidapp.go
- 修改完成后,执行
go install -v golang.org/x/mobile/cmd/gomobile
重新编译并安装gomobile二进制文件
Created
March 13, 2019 04:06
-
-
Save scue/a4a09d9d288e0e62ae922dc86efa5494 to your computer and use it in GitHub Desktop.
修改GOMobile默认编译出来动态库名字(默认libgojni.so),新名字规则是lib<包名>.so
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/cmd/gomobile/bind_androidapp.go b/cmd/gomobile/bind_androidapp.go | |
index 9897fbd..8ce17c3 100644 | |
--- a/cmd/gomobile/bind_androidapp.go | |
+++ b/cmd/gomobile/bind_androidapp.go | |
@@ -6,6 +6,7 @@ package main | |
import ( | |
"archive/zip" | |
+ "bytes" | |
"errors" | |
"fmt" | |
"go/build" | |
@@ -18,7 +19,12 @@ import ( | |
"strings" | |
) | |
+const ( | |
+ DefaultLibName = "gojni" | |
+) | |
+ | |
func goAndroidBind(gobind string, pkgs []*build.Package, androidArchs []string) error { | |
+ targetPkg := pkgs[0].Name | |
if sdkDir := os.Getenv("ANDROID_HOME"); sdkDir == "" { | |
return fmt.Errorf("this command requires ANDROID_HOME environment variable (path to the Android SDK)") | |
} | |
@@ -68,7 +74,7 @@ func goAndroidBind(gobind string, pkgs []*build.Package, androidArchs []string) | |
"gobind", | |
env, | |
"-buildmode=c-shared", | |
- "-o="+filepath.Join(androidDir, "src/main/jniLibs/"+toolchain.abi+"/libgojni.so"), | |
+ "-o="+filepath.Join(androidDir, fmt.Sprintf("src/main/jniLibs/%s/lib%s.so", toolchain.abi, targetPkg)), | |
) | |
if err != nil { | |
return err | |
@@ -121,8 +127,9 @@ func buildSrcJar(src string) error { | |
// javac and jar commands are needed to build classes.jar. | |
func buildAAR(srcDir, androidDir string, pkgs []*build.Package, androidArchs []string) (err error) { | |
var out io.Writer = ioutil.Discard | |
+ targetPkg := pkgs[0].Name | |
if buildO == "" { | |
- buildO = pkgs[0].Name + ".aar" | |
+ buildO = targetPkg + ".aar" | |
} | |
if !strings.HasSuffix(buildO, ".aar") { | |
return fmt.Errorf("output file name %q does not end in '.aar'", buildO) | |
@@ -153,7 +160,7 @@ func buildAAR(srcDir, androidDir string, pkgs []*build.Package, androidArchs []s | |
} | |
const manifestFmt = `<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=%q> | |
<uses-sdk android:minSdkVersion="%d"/></manifest>` | |
- fmt.Fprintf(w, manifestFmt, "go."+pkgs[0].Name+".gojni", minAndroidAPI) | |
+ fmt.Fprintf(w, manifestFmt, "go."+targetPkg+"."+targetPkg, minAndroidAPI) | |
w, err = aarwcreate("proguard.txt") | |
if err != nil { | |
@@ -165,7 +172,7 @@ func buildAAR(srcDir, androidDir string, pkgs []*build.Package, androidArchs []s | |
if err != nil { | |
return err | |
} | |
- if err := buildJar(w, srcDir); err != nil { | |
+ if err := buildJar(w, srcDir, targetPkg); err != nil { | |
return err | |
} | |
@@ -214,7 +221,7 @@ func buildAAR(srcDir, androidDir string, pkgs []*build.Package, androidArchs []s | |
for _, arch := range androidArchs { | |
toolchain := ndk.Toolchain(arch) | |
- lib := toolchain.abi + "/libgojni.so" | |
+ lib := fmt.Sprintf("%s/lib%s.so", toolchain.abi, targetPkg) | |
w, err = aarwcreate("jni/" + lib) | |
if err != nil { | |
return err | |
@@ -250,7 +257,7 @@ const ( | |
minAndroidAPI = 15 | |
) | |
-func buildJar(w io.Writer, srcDir string) error { | |
+func buildJar(w io.Writer, srcDir, targetPkg string) error { | |
var srcFiles []string | |
if buildN { | |
srcFiles = []string{"*.java"} | |
@@ -262,6 +269,14 @@ func buildJar(w io.Writer, srcDir string) error { | |
if filepath.Ext(path) == ".java" { | |
srcFiles = append(srcFiles, filepath.Join(".", path[len(srcDir):])) | |
} | |
+ if strings.Contains(path, "LoadJNI.java") { | |
+ content, err := ioutil.ReadFile(path) | |
+ if err != nil { | |
+ return err | |
+ } | |
+ content = bytes.Replace(content, []byte(DefaultLibName), []byte(targetPkg), 1) | |
+ ioutil.WriteFile(path, content, 775) | |
+ } | |
return nil | |
}) | |
if err != nil { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment