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"
|