build-aar.sh 3.02 KB
#!/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"
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"

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

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

find "$SRC_DIR" -name '*.java' -print0 | xargs -0 javac -source 1.8 -target 1.8 -encoding UTF-8 -cp "$ANDROID_JAR:$BUILD_DIR/stubs.jar:$SDK_LIB_JAR" -d "$CLASS_DIR"
jar cf "$BUILD_DIR/classes.jar" -C "$CLASS_DIR" .
cp "$SDK_LIB_JAR" "$BUILD_DIR/libs/SDKLib.jar"

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"
zip -q -r "$OUT_AAR" AndroidManifest.xml classes.jar R.txt META-INF libs

echo "Built AAR: $OUT_AAR"