Blame view

打印机安卓基座/native-fast-printer/android-src/build-aar.sh 6.36 KB
a6f5c1af   “wangming”   开发了安卓基座
1
2
3
4
5
6
7
8
  #!/bin/bash
  set -euo pipefail
  
  ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
  PROJECT_ROOT="$(cd "$ROOT_DIR/../../.." && pwd)"
  OUT_DIR="$(cd "$ROOT_DIR/.." && pwd)/android"
  SRC_DIR="$ROOT_DIR/src"
  BUILD_DIR="$ROOT_DIR/build"
3ead62fc   杨鑫   优化
9
10
11
12
  DEPS_DIR="$ROOT_DIR/deps"
  UPOS_DEMO_ROOT="$PROJECT_ROOT/UnifiedPOSDevicesDemo_V1.026_EN"
  UPOS_AAR="$UPOS_DEMO_ROOT/app/libs/possdk-release.aar"
  UPOS_CORE_JAR="$UPOS_DEMO_ROOT/app/libs/core-2.3.0.jar"
a6f5c1af   “wangming”   开发了安卓基座
13
14
15
16
17
18
19
  STUB_DIR="$BUILD_DIR/stubs"
  CLASS_DIR="$BUILD_DIR/classes"
  STUB_CLASS_DIR="$BUILD_DIR/stub-classes"
  ANDROID_JAR="${ANDROID_JAR:-$HOME/Library/Android/sdk/platforms/android-34/android.jar}"
  SDK_LIB_JAR="${SDK_LIB_JAR:-$PROJECT_ROOT/打印机SDK/Android/标签打印机安卓SDK-V3.3.1-20230327/TscDemo/app/libs/SDKLib.jar}"
  OUT_AAR="$OUT_DIR/native_fast_printer-release.aar"
  
3ead62fc   杨鑫   优化
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  # Git Bash / MSYS:Windows 路径 C:\... 需转成 /c/...,否则 javac 拿不到 android.jar(会报 android.* 不存在)
  normalize_path_for_bash() {
    local p="$1"
    if [[ -z "$p" ]]; then
      echo ""
      return
    fi
    if command -v cygpath >/dev/null 2>&1; then
      cygpath -u "$p" 2>/dev/null || echo "$p"
      return
    fi
    if [[ "$p" =~ ^[A-Za-z]: ]]; then
      local d
      d=$(echo "${p:0:1}" | tr '[:upper:]' '[:lower:]')
      local r="${p:2}"
      r="${r//\\//}"
      echo "/$d$r"
      return
    fi
    echo "$p"
  }
  
  ANDROID_JAR="$(normalize_path_for_bash "$ANDROID_JAR")"
  SDK_LIB_JAR="$(normalize_path_for_bash "$SDK_LIB_JAR")"
  UPOS_AAR="$(normalize_path_for_bash "$UPOS_AAR")"
  UPOS_CORE_JAR="$(normalize_path_for_bash "$UPOS_CORE_JAR")"
  
  mkdir -p "$DEPS_DIR"
  JSON_JAR="$DEPS_DIR/json-20240303.jar"
  if [[ ! -f "$JSON_JAR" ]]; then
    echo "Downloading org.json jar for host compile..."
    curl -fsSL -o "$JSON_JAR" "https://repo1.maven.org/maven2/org/json/json/20240303/json-20240303.jar"
  fi
  
  UPOS_CLASSES_JAR="$DEPS_DIR/possdk-classes.jar"
699ea6e8   杨鑫   完善打印逻辑
55
  UPOS_JNI_DIR="$DEPS_DIR/possdk-jni"
3ead62fc   杨鑫   优化
56
  if [[ -f "$UPOS_AAR" ]]; then
699ea6e8   杨鑫   完善打印逻辑
57
58
    if [[ ! -f "$UPOS_CLASSES_JAR" ]] || [[ "$UPOS_AAR" -nt "$UPOS_CLASSES_JAR" ]] || [[ ! -d "$UPOS_JNI_DIR" ]]; then
      echo "Extracting possdk classes.jar/jni from AAR..."
3ead62fc   杨鑫   优化
59
60
61
62
63
64
65
66
67
68
69
70
71
      TMP_UPOS_DIR="$DEPS_DIR/.upos_aar_extract"
      rm -rf "$TMP_UPOS_DIR"
      mkdir -p "$TMP_UPOS_DIR"
      (
        cd "$TMP_UPOS_DIR"
        # AAR is ZIP; jar can extract it.
        jar xf "$UPOS_AAR"
      )
      if [[ ! -f "$TMP_UPOS_DIR/classes.jar" ]]; then
        echo "ERROR: classes.jar not found inside possdk-release.aar" >&2
        exit 1
      fi
      cp "$TMP_UPOS_DIR/classes.jar" "$UPOS_CLASSES_JAR"
699ea6e8   杨鑫   完善打印逻辑
72
73
74
75
76
      rm -rf "$UPOS_JNI_DIR"
      if [[ -d "$TMP_UPOS_DIR/jni" ]]; then
        mkdir -p "$UPOS_JNI_DIR"
        cp -R "$TMP_UPOS_DIR/jni/." "$UPOS_JNI_DIR/"
      fi
3ead62fc   杨鑫   优化
77
78
79
80
81
82
      rm -rf "$TMP_UPOS_DIR"
    fi
  else
    echo "WARN: UnifiedPOS possdk-release.aar not found: $UPOS_AAR"
  fi
  
a6f5c1af   “wangming”   开发了安卓基座
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
  rm -rf "$BUILD_DIR"
  mkdir -p "$STUB_DIR/com/taobao/weex/annotation" \
           "$STUB_DIR/com/taobao/weex/bridge" \
           "$STUB_DIR/io/dcloud/feature/uniapp/common" \
           "$STUB_DIR/com/alibaba/fastjson" \
           "$CLASS_DIR" "$STUB_CLASS_DIR" "$OUT_DIR" "$BUILD_DIR/libs"
  
  cat > "$STUB_DIR/com/taobao/weex/annotation/JSMethod.java" <<'STUB'
  package com.taobao.weex.annotation;
  import java.lang.annotation.ElementType;
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  import java.lang.annotation.Target;
  @Retention(RetentionPolicy.RUNTIME)
  @Target(ElementType.METHOD)
  public @interface JSMethod { boolean uiThread() default true; }
  STUB
  
  cat > "$STUB_DIR/com/taobao/weex/bridge/JSCallback.java" <<'STUB'
  package com.taobao.weex.bridge;
  public interface JSCallback {
    void invoke(Object value);
    void invokeAndKeepAlive(Object value);
  }
  STUB
  
  cat > "$STUB_DIR/io/dcloud/feature/uniapp/common/UniModule.java" <<'STUB'
  package io.dcloud.feature.uniapp.common;
  public class UniModule {}
  STUB
  
  cat > "$STUB_DIR/com/alibaba/fastjson/JSONObject.java" <<'STUB'
  package com.alibaba.fastjson;
  import java.util.HashMap;
  public class JSONObject extends HashMap<String, Object> {
    public String getString(String key){ Object v = get(key); return v == null ? null : String.valueOf(v); }
    public Integer getInteger(String key){ Object v = get(key); if (v == null) return null; if (v instanceof Number) return ((Number)v).intValue(); return Integer.parseInt(String.valueOf(v)); }
  }
  STUB
  
3ead62fc   杨鑫   优化
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
  if [[ ! -f "$ANDROID_JAR" ]]; then
    echo "ERROR: ANDROID_JAR not found: $ANDROID_JAR" >&2
    echo "Set ANDROID_JAR to your SDK platforms/android-XX/android.jar" >&2
    exit 1
  fi
  if [[ ! -f "$SDK_LIB_JAR" ]]; then
    echo "ERROR: SDK_LIB_JAR not found: $SDK_LIB_JAR" >&2
    exit 1
  fi
  
  CP_MAIN="$ANDROID_JAR:$BUILD_DIR/stubs.jar:$SDK_LIB_JAR:$JSON_JAR"
  if [[ -f "$UPOS_CLASSES_JAR" ]]; then
    CP_MAIN="$CP_MAIN:$UPOS_CLASSES_JAR"
  fi
  if [[ -f "$UPOS_CORE_JAR" ]]; then
    CP_MAIN="$CP_MAIN:$UPOS_CORE_JAR"
  fi
  
a6f5c1af   “wangming”   开发了安卓基座
141
142
143
  find "$STUB_DIR" -name '*.java' -print0 | xargs -0 javac -source 1.8 -target 1.8 -encoding UTF-8 -cp "$ANDROID_JAR" -d "$STUB_CLASS_DIR"
  jar cf "$BUILD_DIR/stubs.jar" -C "$STUB_CLASS_DIR" .
  
3ead62fc   杨鑫   优化
144
  find "$SRC_DIR" -name '*.java' -print0 | xargs -0 javac -source 1.8 -target 1.8 -encoding UTF-8 -cp "$CP_MAIN" -d "$CLASS_DIR"
a6f5c1af   “wangming”   开发了安卓基座
145
146
  jar cf "$BUILD_DIR/classes.jar" -C "$CLASS_DIR" .
  cp "$SDK_LIB_JAR" "$BUILD_DIR/libs/SDKLib.jar"
3ead62fc   杨鑫   优化
147
148
149
150
151
152
  if [[ -f "$UPOS_CLASSES_JAR" ]]; then
    cp "$UPOS_CLASSES_JAR" "$BUILD_DIR/libs/possdk-classes.jar"
  fi
  if [[ -f "$UPOS_CORE_JAR" ]]; then
    cp "$UPOS_CORE_JAR" "$BUILD_DIR/libs/core-2.3.0.jar"
  fi
699ea6e8   杨鑫   完善打印逻辑
153
154
155
156
  if [[ -d "$UPOS_JNI_DIR" ]]; then
    mkdir -p "$BUILD_DIR/jni"
    cp -R "$UPOS_JNI_DIR/." "$BUILD_DIR/jni/"
  fi
a6f5c1af   “wangming”   开发了安卓基座
157
158
159
160
161
162
163
164
165
166
167
168
169
170
  
  cat > "$BUILD_DIR/AndroidManifest.xml" <<'MANIFEST'
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.foodlabel.nativeprinter" />
  MANIFEST
  : > "$BUILD_DIR/R.txt"
  mkdir -p "$BUILD_DIR/META-INF/com/android/build/gradle"
  cat > "$BUILD_DIR/META-INF/com/android/build/gradle/aar-metadata.properties" <<'META'
  aarFormatVersion=1.0
  aarMetadataVersion=1.0
  META
  
  cd "$BUILD_DIR"
  rm -f "$OUT_AAR"
3ead62fc   杨鑫   优化
171
172
  # Windows Git Bash 通常没有 zip;AAR 本质是 ZIP,用 JDK 自带的 jar 打包(与 javac 同目录)
  if command -v zip >/dev/null 2>&1; then
699ea6e8   杨鑫   完善打印逻辑
173
    zip -q -r "$OUT_AAR" AndroidManifest.xml classes.jar R.txt META-INF libs jni
3ead62fc   杨鑫   优化
174
175
176
177
178
179
  else
    if ! command -v jar >/dev/null 2>&1; then
      echo "ERROR: neither zip nor jar found in PATH. Install JDK and add JAVA_HOME/bin to PATH." >&2
      exit 127
    fi
    # c0 = 仅存储;M = 不生成 jar 默认 MANIFEST(避免污染 AAR 的 META-INF)
699ea6e8   杨鑫   完善打印逻辑
180
    jar c0Mf "$OUT_AAR" AndroidManifest.xml classes.jar R.txt META-INF libs jni
3ead62fc   杨鑫   优化
181
  fi
a6f5c1af   “wangming”   开发了安卓基座
182
183
  
  echo "Built AAR: $OUT_AAR"