#!/bin/bash
echo "🚀 Creating Valid HikeMap APK (Alternative Method)"
echo "=================================================="
# Create temp directory for APK build
TEMP_DIR="/tmp/hikemap-apk-build"
rm -rf "$TEMP_DIR"
mkdir -p "$TEMP_DIR"
cd "$TEMP_DIR"
# Create basic Android project structure
echo "📁 Creating Android project structure..."
mkdir -p app/src/main/java/org/duckdns/bibbit/hikemap
mkdir -p app/src/main/res/values
mkdir -p app/src/main/res/drawable
mkdir -p app/src/main/assets
# Create MainActivity.java
cat > app/src/main/java/org/duckdns/bibbit/hikemap/MainActivity.java <<'EOF'
package org.duckdns.bibbit.hikemap;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.GeolocationPermissions;
import android.webkit.WebChromeClient;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
public class MainActivity extends Activity {
private WebView webView;
private static final int LOCATION_PERMISSION_REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
setContentView(webView);
// Request location permission if needed
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
}, LOCATION_PERMISSION_REQUEST);
}
}
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
webSettings.setGeolocationEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setAllowFileAccess(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("https://maps.bibbit.duckdns.org")) {
return false;
}
return true;
}
});
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
}
});
webView.loadUrl("https://maps.bibbit.duckdns.org");
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
EOF
# Create AndroidManifest.xml
cat > app/src/main/AndroidManifest.xml <<'EOF'
EOF
# Create strings.xml
cat > app/src/main/res/values/strings.xml <<'EOF'
HikeMap
EOF
# Copy icon if available
if [ -f /home/frigate/HikeMap/icon-192x192.png ]; then
cp /home/frigate/HikeMap/icon-192x192.png app/src/main/res/drawable/ic_launcher.png
else
# Create a simple default icon
echo "Creating default icon..."
convert -size 192x192 xc:green app/src/main/res/drawable/ic_launcher.png 2>/dev/null || true
fi
# Create build.gradle for app module
cat > app/build.gradle <<'EOF'
apply plugin: 'com.android.application'
android {
compileSdkVersion 33
defaultConfig {
applicationId "org.duckdns.bibbit.hikemap"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0.0"
}
buildTypes {
release {
minifyEnabled false
}
}
}
dependencies {
}
EOF
# Create root build.gradle
cat > build.gradle <<'EOF'
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
EOF
# Create settings.gradle
cat > settings.gradle <<'EOF'
include ':app'
EOF
# Create gradle.properties
cat > gradle.properties <<'EOF'
android.useAndroidX=false
android.enableJetifier=false
EOF
echo "✅ Android project structure created"
echo ""
echo "📝 Note: To build this APK, you need:"
echo " 1. Android SDK installed"
echo " 2. Run: ./gradlew assembleRelease"
echo " 3. Sign the APK with jarsigner or apksigner"
echo ""
echo "The Docker build is still running in the background and will produce a better APK."