以下方法是手动下载sdk以及模拟器等,可以完全脱离android studio来进行对应的开发。同时也适合将开发环境跟项目绑定,而不需要每个人都在主机全局安装相同环境或者多个环境来回切换.
下边的脚本包括ndk编译,可以按需去掉
export ANDROID_HOME=$(shell mkdir -p .sdk && cd .sdk && pwd)
export ANDROID_SDK_ROOT=$(ANDROID_HOME)
export ANDROID_SDK_HOME=$(ANDROID_HOME)
export NODE_TSL_REJECT_UNAUTHORIZED=0
NDK_VERSION=23.1.7779620
NDK_PATH := $(ANDROID_HOME)/ndk/$(NDK_VERSION)
SDKMANAGER=./sdkmanager
AVDMANAGER=./avdmanager
GRADLEW=./gradlew
ifeq ($(shell uname),Darwin)
ANDROID_COMMANDTOOLS_URL=https://dl.google.com/android/repository/commandlinetools-mac-9477386_latest.zip
ANDROID_SDK_NAME=system-images;android-33;google_apis;arm64-v8a
ANDROID_SDK_AVD=system-images;android-33;google_apis;arm64-v8a
TOOLCHAIN=$(NDK_PATH)/toolchains/llvm/prebuilt/darwin-x86_64
PLATFORM_ARCH?=aarch64
else ifeq ($(shell uname),Linux)
ANDROID_COMMANDTOOLS_URL=https://dl.google.com/android/repository/commandlinetools-win-9477386_latest.zip
ANDROID_SDK_NAME=system-images;android-33;google_apis;x86_64
ANDROID_SDK_AVD=system-images;android-33;google_apis;x86_64
TOOLCHAIN=$(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64
PLATFORM_ARCH?=aarch64
$(error unsupport operating system: $(shell uname))
else ifeq ($(shell uname -o),Msys)
ANDROID_COMMANDTOOLS_URL=https://dl.google.com/android/repository/commandlinetools-win-9477386_latest.zip
ANDROID_SDK_NAME=system-images;android-33;google_apis;x86_64
ANDROID_SDK_AVD=system-images;android-33;google_apis;x86_64
TOOLCHAIN=$(NDK_PATH)/toolchains/llvm/prebuilt/windows-x86_64
SDKMANAGER=./sdkmanager.bat
AVDMANAGER=./avdmanager.bat
GRADLEW=gradlew.bat
PLATFORM_ARCH?=x86_64
else
$(error unknown operating system: $(shell uname))
endif
install_sdk:
mkdir -p $(ANDROID_HOME)
cd $(ANDROID_HOME) && if [ ! -f step1.done ]; then wget $(ANDROID_COMMANDTOOLS_URL) -O commandlinetools.zip; fi && touch step1.done
cd $(ANDROID_HOME) && if [ ! -f step2.done ]; then unzip commandlinetools.zip; fi && touch step2.done
cd $(ANDROID_HOME) && if [ ! -f step3.done ]; then mv cmdline-tools latest; fi && touch step3.done
cd $(ANDROID_HOME) && if [ ! -f step4.done ]; then mkdir cmdline-tools; fi && touch step4.done
cd $(ANDROID_HOME) && if [ ! -f step5.done ]; then mv latest cmdline-tools/latest; fi && touch step5.done
cd $(ANDROID_HOME)/cmdline-tools/latest/bin && if [ ! -f step6.done ]; then $(SDKMANAGER) --install "platform-tools"; fi && touch step6.done
cd $(ANDROID_HOME)/cmdline-tools/latest/bin && if [ ! -f step7.done ]; then $(SDKMANAGER) --install "ndk;23.1.7779620"; fi && touch step7.done
cd $(ANDROID_HOME)/cmdline-tools/latest/bin && if [ ! -f step8.done ]; then $(SDKMANAGER) --install "build-tools;33.0.0"; fi && touch step8.done
cd $(ANDROID_HOME)/cmdline-tools/latest/bin && if [ ! -f step9.done ]; then $(SDKMANAGER) --install "emulator"; fi && touch step9.done
cd $(ANDROID_HOME)/cmdline-tools/latest/bin && if [ ! -f stepA.done ]; then $(SDKMANAGER) --install "$(ANDROID_SDK_NAME)"; fi && touch stepA.done
cd $(ANDROID_HOME)/cmdline-tools/latest/bin && if [ ! -f stepB.done ]; then $(AVDMANAGER) create avd -d 45 -n android -k "$(ANDROID_SDK_AVD)" -f; fi && touch stepB.done
cd $(ANDROID_HOME)/cmdline-tools/latest/bin && $(AVDMANAGER) list avd
echo sdk.dir=$(ANDROID_HOME) > local.properties
emulator:
mkdir -p $(ANDROID_HOME)/platforms
cd $(ANDROID_HOME)/emulator && ./emulator -avd android -netdelay none -netspeed full -memory 4096
start:
$(GRADLEW) installDebug
echo "注意将设备opengles设置到3.0以上. 在模拟器的设置界面"
cd $(ANDROID_HOME)/platform-tools && ./adb shell am start -n "com.engine.game2d/com.engine.game2d.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
logcat:
cd $(ANDROID_HOME)/platform-tools && ./adb logcat --pid=$(shell cd $(ANDROID_HOME)/platform-tools && adb shell pidof com.engine.game2d)
jniLibsDir:
mkdir -p src/main/jniLibs/arm64-v8a
mkdir -p src/main/jniLibs/armeabi-v7a
mkdir -p src/main/jniLibs/x86_64
mkdir -p src/main/jniLibs/x86
apk:
## 这里是编译对应的 ndk
+make PLATFORM_ARCH=aarch64
+make PLATFORM_ARCH=x86_64
+make PLATFORM_ARCH=armv7a
+make PLATFORM_ARCH=i686
$(GRADLEW) assembleDebug
assembleDebug:
$(GRADLEW) assembleDebug
PLATFORM=android-$(PLATFORM_ARCH)
CODEDIR = ../..
CC := $(TOOLCHAIN)/bin/$(PLATFORM_ARCH)-linux-android21-clang
ifeq ($(PLATFORM_ARCH),aarch64)
TARGET_DIR = arm64-v8a
else ifeq ($(PLATFORM_ARCH),armv7a)
TARGET_DIR = armeabi-v7a
CC := $(TOOLCHAIN)/bin/$(PLATFORM_ARCH)-linux-androideabi21-clang
else ifeq ($(PLATFORM_ARCH),x86_64)
TARGET_DIR = x86_64
else ifeq ($(PLATFORM_ARCH),i686)
TARGET_DIR = x86
endif
TARGET = src/main/jniLibs/$(TARGET_DIR)/libapp.so
# 编译选项
CFLAGS := -O3 -fPIC -D__android__ -Wno-void-pointer-to-int-cast -Wno-int-to-void-pointer-cast -Wno-unknown-warning-option -I$(NDK_PATH)/sysroot/usr/include
LDFLAGS := -O3 -shared -L$(NDK_PATH)/sysroot/usr/lib -landroid -lEGL -lGLESv3 -ljnigraphics -llog -lm -pthread
# 省略 ... c/cpp编译逻辑