aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorPo Lu2023-01-26 19:54:38 +0800
committerPo Lu2023-01-26 19:54:38 +0800
commit22f7ad1057e1a1e20933e0a1ff2a858ecd9e3fec (patch)
treed4e78a253eb91723411badef5d47e229562e642e /java
parent4255d7f0514c5fa1badded6b0bc445ec2d2764c0 (diff)
downloademacs-22f7ad1057e1a1e20933e0a1ff2a858ecd9e3fec.tar.gz
emacs-22f7ad1057e1a1e20933e0a1ff2a858ecd9e3fec.zip
Update Android port
* INSTALL.android: Document how to install sqlite3. * build-aux/ndk-build-helper-1.mk (SYSTEM_LIBRARIES): * build-aux/ndk-build-helper-2.mk (SYSTEM_LIBRARIES): Add liblog and libandroid. * configure.ac (SQLITE3_LIBS, HAVE_SQLITE3) (HAVE_SQLITE3_LOAD_EXTENSION): Support on Android. (APKSIGNER): Look for this new required binary. * cross/ndk-build/ndk-build-shared-library.mk (objname): * cross/ndk-build/ndk-build-static-library.mk (objname): Avoid duplicate rules by prefixing objects with module type. * cross/ndk-build/ndk-build.mk.in (NDK_BUILD_SHARED): Fix definition. * cross/ndk-build/ndk-resolve.mk: (NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE)): Handle new system libraries. * doc/emacs/android.texi (Android File System): Document Android 10 system restriction. * java/AndroidManifest.xml.in: Target Android 33, not 28. * java/Makefile.in (SIGN_EMACS_V2, APKSIGNER): New variables. ($(APK_NAME)): Make sure to apply a ``version 2 signature'' to the package as well. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New argument apiLevel. * java/org/gnu/emacs/EmacsNoninteractive.java (main): * java/org/gnu/emacs/EmacsThread.java (run): Pass API level. * m4/ndk-build.m4 (ndk_package_mape): Add package mapping for sqlite3. * src/Makefile.in (SQLITE3_CFLAGS): New substition. (EMACS_CFLAGS): Add that variable. * src/android.c (android_api_level): New variable. (initEmacs): Set it. (android_file_access_p): Make static. (android_hack_asset_fd): Adjust for restrictions in Android 29 and later. (android_close_on_exec): New function. (android_open): Adjust to not duplicate file descriptor even if CLOEXEC. (android_faccessat): Use fstatat at-func emulation. * src/android.h: Update prototypes. * src/dired.c (file_name_completion_dirp): * src/fileio.c (file_access_p, Faccess_file): Now that sys_faccessat takes care of everything, stop calling android_file_access_p.
Diffstat (limited to 'java')
-rw-r--r--java/AndroidManifest.xml.in2
-rw-r--r--java/Makefile.in9
-rw-r--r--java/org/gnu/emacs/EmacsNative.java7
-rw-r--r--java/org/gnu/emacs/EmacsNoninteractive.java3
-rw-r--r--java/org/gnu/emacs/EmacsThread.java5
5 files changed, 19 insertions, 7 deletions
diff --git a/java/AndroidManifest.xml.in b/java/AndroidManifest.xml.in
index c4a9d1f5177..527ce74c474 100644
--- a/java/AndroidManifest.xml.in
+++ b/java/AndroidManifest.xml.in
@@ -53,7 +53,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. -->
53 <uses-permission android:name="android.permission.CAMERA" /> 53 <uses-permission android:name="android.permission.CAMERA" />
54 54
55 <uses-sdk android:minSdkVersion="@ANDROID_MIN_SDK@" 55 <uses-sdk android:minSdkVersion="@ANDROID_MIN_SDK@"
56 android:targetSdkVersion="28"/> 56 android:targetSdkVersion="33"/>
57 57
58 <application android:name="org.gnu.emacs.EmacsApplication" 58 <application android:name="org.gnu.emacs.EmacsApplication"
59 android:label="Emacs" 59 android:label="Emacs"
diff --git a/java/Makefile.in b/java/Makefile.in
index 755995b93b1..a7bc8ac027a 100644
--- a/java/Makefile.in
+++ b/java/Makefile.in
@@ -33,6 +33,7 @@ AAPT = @AAPT@
33D8 = @D8@ 33D8 = @D8@
34ZIPALIGN = @ZIPALIGN@ 34ZIPALIGN = @ZIPALIGN@
35JARSIGNER = @JARSIGNER@ 35JARSIGNER = @JARSIGNER@
36APKSIGNER = @APKSIGNER@
36JARSIGNER_FLAGS = 37JARSIGNER_FLAGS =
37ANDROID_JAR = @ANDROID_JAR@ 38ANDROID_JAR = @ANDROID_JAR@
38ANDROID_ABI = @ANDROID_ABI@ 39ANDROID_ABI = @ANDROID_ABI@
@@ -52,6 +53,8 @@ JARSIGNER_FLAGS =
52endif 53endif
53 54
54SIGN_EMACS = -keystore emacs.keystore -storepass emacs1 $(JARSIGNER_FLAGS) 55SIGN_EMACS = -keystore emacs.keystore -storepass emacs1 $(JARSIGNER_FLAGS)
56SIGN_EMACS_V2 = sign --v2-signing-enabled --ks emacs.keystore \
57 --debuggable-apk-permitted --ks-pass pass:emacs1
55 58
56JAVA_FILES = $(shell find . -type f -name *.java) 59JAVA_FILES = $(shell find . -type f -name *.java)
57CLASS_FILES = $(foreach file,$(JAVA_FILES),$(basename $(file)).class) 60CLASS_FILES = $(foreach file,$(JAVA_FILES),$(basename $(file)).class)
@@ -196,10 +199,12 @@ $(APK_NAME): classes.dex emacs.apk-in emacs.keystore
196 $(AAPT) add $@.unaligned classes.dex 199 $(AAPT) add $@.unaligned classes.dex
197 $(JARSIGNER) $(SIGN_EMACS) $@.unaligned "Emacs keystore" 200 $(JARSIGNER) $(SIGN_EMACS) $@.unaligned "Emacs keystore"
198 $(ZIPALIGN) -f 4 $@.unaligned $@ 201 $(ZIPALIGN) -f 4 $@.unaligned $@
199 rm -f $@.unaligned 202# Signing must happen after alignment!
203 $(APKSIGNER) $(SIGN_EMACS_V2) $@
204 rm -f $@.unaligned *.idsig
200 205
201clean: 206clean:
202 rm -f *.apk emacs.apk-in *.dex *.unaligned *.class 207 rm -f *.apk emacs.apk-in *.dex *.unaligned *.class *.idsig
203 rm -rf install-temp 208 rm -rf install-temp
204 find . -name '*.class' -delete 209 find . -name '*.class' -delete
205 210
diff --git a/java/org/gnu/emacs/EmacsNative.java b/java/org/gnu/emacs/EmacsNative.java
index a772b965301..7bf8b5f6081 100644
--- a/java/org/gnu/emacs/EmacsNative.java
+++ b/java/org/gnu/emacs/EmacsNative.java
@@ -65,8 +65,11 @@ public class EmacsNative
65 undefined. 65 undefined.
66 66
67 DUMPFILE is the dump file to use, or NULL if Emacs is to load 67 DUMPFILE is the dump file to use, or NULL if Emacs is to load
68 loadup.el itself. */ 68 loadup.el itself.
69 public static native void initEmacs (String argv[], String dumpFile); 69
70 APILEVEL is the version of Android being used. */
71 public static native void initEmacs (String argv[], String dumpFile,
72 int apiLevel);
70 73
71 /* Abort and generate a native core dump. */ 74 /* Abort and generate a native core dump. */
72 public static native void emacsAbort (); 75 public static native void emacsAbort ();
diff --git a/java/org/gnu/emacs/EmacsNoninteractive.java b/java/org/gnu/emacs/EmacsNoninteractive.java
index b4854d8323f..4da82f2f894 100644
--- a/java/org/gnu/emacs/EmacsNoninteractive.java
+++ b/java/org/gnu/emacs/EmacsNoninteractive.java
@@ -177,6 +177,7 @@ public class EmacsNoninteractive
177 EmacsApplication.findDumpFile (context); 177 EmacsApplication.findDumpFile (context);
178 178
179 /* Start Emacs. */ 179 /* Start Emacs. */
180 EmacsNative.initEmacs (args, EmacsApplication.dumpFileName); 180 EmacsNative.initEmacs (args, EmacsApplication.dumpFileName,
181 Build.VERSION.SDK_INT);
181 } 182 }
182}; 183};
diff --git a/java/org/gnu/emacs/EmacsThread.java b/java/org/gnu/emacs/EmacsThread.java
index f5e9d54044a..2724d838d41 100644
--- a/java/org/gnu/emacs/EmacsThread.java
+++ b/java/org/gnu/emacs/EmacsThread.java
@@ -21,6 +21,8 @@ package org.gnu.emacs;
21 21
22import java.lang.Thread; 22import java.lang.Thread;
23 23
24import android.os.Build;
25
24public class EmacsThread extends Thread 26public class EmacsThread extends Thread
25{ 27{
26 /* Whether or not Emacs should be started -Q. */ 28 /* Whether or not Emacs should be started -Q. */
@@ -45,6 +47,7 @@ public class EmacsThread extends Thread
45 args = new String[] { "libandroid-emacs.so", "-Q", }; 47 args = new String[] { "libandroid-emacs.so", "-Q", };
46 48
47 /* Run the native code now. */ 49 /* Run the native code now. */
48 EmacsNative.initEmacs (args, EmacsApplication.dumpFileName); 50 EmacsNative.initEmacs (args, EmacsApplication.dumpFileName,
51 Build.VERSION.SDK_INT);
49 } 52 }
50}; 53};