瀏覽代碼

android: Work on API level 36 support (though target 35 for now)

rdb 1 月之前
父節點
當前提交
32bdca9015

+ 2 - 2
.github/workflows/ci.yml

@@ -633,7 +633,7 @@ jobs:
       uses: actions/cache/restore@v4
       with:
         path: ./thirdparty
-        key: cache-android-thirdparty-afc7ad98aee90da0f2f6bad826a41f9b71e0cdd0-${{ matrix.android-abi }}-ndk${{ matrix.ndk-version }}
+        key: cache-android-thirdparty-935c80380ca171e08587c570e9dad678d29db3c8-${{ matrix.android-abi }}-ndk${{ matrix.ndk-version }}
 
     - name: Install yasm
       if: steps.cache-android-thirdparty-restore.outputs.cache-hit != 'true'
@@ -642,7 +642,7 @@ jobs:
     - name: Build thirdparty packages
       if: steps.cache-android-thirdparty-restore.outputs.cache-hit != 'true'
       run: |
-        git clone --revision=afc7ad98aee90da0f2f6bad826a41f9b71e0cdd0 --depth=1 https://github.com/rdb/panda3d-thirdparty.git thirdparty
+        git clone --revision=935c80380ca171e08587c570e9dad678d29db3c8 --depth=1 https://github.com/rdb/panda3d-thirdparty.git thirdparty
         cd thirdparty
         cmake -B build \
           -DCMAKE_BUILD_TYPE=Release \

+ 3 - 0
direct/src/dist/FreezeTool.py

@@ -1970,6 +1970,9 @@ class Freezer:
         elif self.platform.endswith('_aarch64') or self.platform.endswith('_arm64'):
             # Most arm64 operating systems are configured with 16 KiB pages.
             blob_align = 16384
+        elif self.platform.replace('-', '_') == 'android_x86_64':
+            # Android nowadays requires 16 KiB pages on 64-bit Intel as well.
+            blob_align = 16384
         else:
             # Align to page size, so that it can be mmapped.
             blob_align = 4096

+ 2 - 0
direct/src/dist/_android.py

@@ -174,6 +174,7 @@ ANDROID_ATTRIBUTES = {
     'debuggable': bool_resource(0x0101000f),
     'documentLaunchMode': enum_resource(0x1010445, "none", "intoExisting", "always", "never"),
     'enabled': bool_resource(0x101000e),
+    'enableOnBackInvokedCallback': bool_resource(0x0101066c),
     'excludeFromRecents': bool_resource(0x1010017),
     'exported': bool_resource(0x1010010),
     'extractNativeLibs': bool_resource(0x10104ea),
@@ -195,6 +196,7 @@ ANDROID_ATTRIBUTES = {
     'multiprocess': bool_resource(0x1010013),
     'name': str_resource(0x1010003),
     'noHistory': bool_resource(0x101022d),
+    'pageSizeCompat': bool_resource(0x010106ab),
     'pathPattern': str_resource(0x101002c),
     'preferMinimalPostProcessing': bool_resource(0x101060c),
     'required': bool_resource(0x101028e),

+ 1 - 1
direct/src/dist/commands.py

@@ -300,7 +300,7 @@ class build_apps(setuptools.Command):
         self.android_version_code = 1
         self.android_min_sdk_version = 21
         self.android_max_sdk_version = None
-        self.android_target_sdk_version = 36
+        self.android_target_sdk_version = 35
         self.android_manifest_file = None
         self.gui_apps = {}
         self.console_apps = {}

+ 1 - 1
direct/src/dist/installers.py

@@ -251,7 +251,7 @@ def create_aab(command, basename, build_dir):
             entry.entry_id.id = entry_id
             entry.name = res_name
 
-            for density, tag in (160, 'mdpi'), (240, 'hdpi'), (320, 'xhdpi'), (480, 'xxhdpi'), (640, 'xxxhdpi'):
+            for density, tag in (120, 'ldpi'), (160, 'mdpi'), (240, 'hdpi'), (320, 'xhdpi'), (480, 'xxhdpi'), (640, 'xxxhdpi'):
                 path = f'res/mipmap-{tag}-v4/{res_name}.png'
                 if (build_dir_fn / path).exists():
                     bundle.add_subfile('base/' + path, build_dir_fn / path, 0)

+ 3 - 0
dtool/src/dtoolbase/memoryHook.cxx

@@ -618,6 +618,9 @@ determine_page_size() const {
 
   _page_size = (size_t)sysinfo.dwPageSize;
 
+#elif defined(ANDROID)
+  _page_size = getpagesize();
+
 #else
   // Posix case.
   _page_size = sysconf(_SC_PAGESIZE);

+ 5 - 0
makepanda/makepanda.py

@@ -1906,6 +1906,11 @@ def CompileLink(dll, obj, opts):
                 cmd += " -march=armv7-a -Wl,--fix-cortex-a8"
             elif arch == 'mips':
                 cmd += ' -mips32'
+
+            if arch.endswith('64'):
+                # See https://developer.android.com/guide/practices/page-sizes
+                cmd += ' -Wl,-z,max-page-size=16384'
+
             cmd += ' -lc -lm'
 
         elif GetTarget() == 'emscripten':