commit eedcc0f5f362aa33bddc36b1950fbd0d091c954f Author: CI Bot Date: Tue Jun 2 21:19:57 2026 +0800 Initial commit with CI/CD diff --git a/.gitea/workflows/android-release.yml b/.gitea/workflows/android-release.yml new file mode 100644 index 0000000..72639d8 --- /dev/null +++ b/.gitea/workflows/android-release.yml @@ -0,0 +1,60 @@ +name: Android Release + +on: + push: + tags: + - 'v*' + +jobs: + release: + runs-on: android + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Java 17 + run: | + export JAVA_HOME=/usr/lib/jvm/java-17-openjdk + export PATH=$JAVA_HOME/bin:$PATH + java -version + + - name: Setup Keystore + run: | + mkdir -p app + echo '${{ secrets.KEYSTORE_BASE64 }}' | base64 -d > app/release.keystore + + - name: Setup Gradle Properties + run: | + echo 'android.aapt2FromMavenOverride=/usr/bin/aapt2' > gradle.properties + echo 'org.gradle.daemon=false' >> gradle.properties + echo 'org.gradle.jvmargs=-Xmx2g' >> gradle.properties + echo 'android.useAndroidX=true' >> gradle.properties + + - name: Copy build.gradle + run: cp .gitea/workflows/build.gradle.signed app/build.gradle + + - name: Build Signed APK + env: + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + run: | + export ANDROID_HOME=/opt/android-sdk + export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH + gradle assembleRelease --no-daemon --stacktrace + VERSION=${GITHUB_REF#refs/tags/} + cp app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/app-${VERSION}-signed.apk + echo "APK_NAME=app-${VERSION}-signed.apk" >> $GITHUB_ENV + + - name: Create Release + run: | + VERSION=${GITHUB_REF#refs/tags/} + RESPONSE=$(curl -s -X POST "https://gitea.kg8.net/api/v1/repos/${{ github.repository }}/releases" -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}" -H "Content-Type: application/json" -d "{\"tag_name\":\"$VERSION\",\"name\":\"Release $VERSION\",\"draft\":false,\"prerelease\":false}") + RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV + + - name: Upload APK + run: | + curl -s -X POST "https://gitea.kg8.net/api/v1/repos/${{ github.repository }}/releases/${{ env.RELEASE_ID }}/assets" -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}" -F "attachment=@app/build/outputs/apk/release/${{ env.APK_NAME }}" + echo '✅ APK 上传成功!' diff --git a/.gitea/workflows/build.gradle.signed b/.gitea/workflows/build.gradle.signed new file mode 100644 index 0000000..8d311bb --- /dev/null +++ b/.gitea/workflows/build.gradle.signed @@ -0,0 +1,45 @@ +plugins { + id 'com.android.application' +} + +android { + namespace 'com.example.newapp' + compileSdk 34 + + defaultConfig { + applicationId 'com.example.newapp' + minSdk 24 + targetSdk 34 + versionCode 1 + versionName '1.0' + } + + signingConfigs { + release { + storeFile file('release.keystore') + storePassword System.getenv('KEYSTORE_PASSWORD') + keyAlias System.getenv('KEY_ALIAS') + keyPassword System.getenv('KEY_PASSWORD') + v1SigningEnabled true + v2SigningEnabled true + } + } + + buildTypes { + release { + signingConfig signingConfigs.release + minifyEnabled false + shrinkResources false + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +dependencies { + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.11.0' +} diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..9c5c06f --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,32 @@ +plugins { + id 'com.android.application' +} + +android { + namespace 'com.example.newapp' + compileSdk 34 + + defaultConfig { + applicationId 'com.example.newapp' + minSdk 24 + targetSdk 34 + versionCode 1 + versionName '1.0' + } + + buildTypes { + release { + minifyEnabled false + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +dependencies { + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.11.0' +} diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..252492e --- /dev/null +++ b/build.gradle @@ -0,0 +1,20 @@ +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:8.1.0' + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/release.keystore b/release.keystore new file mode 100644 index 0000000..a1bdf10 Binary files /dev/null and b/release.keystore differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..e7fd690 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'android-new-app' +include ':app'