android10下编译adb能用的python

要在android10系统源码下编译python,首先的写一个android.bp

我编译的是pyhon2.7,android.bp参考如下:
 

// Copyright 2017 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

subdirs = [
    "Lib",
]

cc_defaults {
    name: "py2-interp-defaults",
    cflags: [
        "-fwrapv",
        "-O3",
        "-Wall",
        "-Wstrict-prototypes",
        "-DPy_BUILD_CORE",
        "-Werror",
        "-Wno-invalid-source-encoding",
        "-Wno-int-conversion",
        "-Wno-missing-field-initializers",
        "-Wno-null-pointer-arithmetic",
        "-Wno-register",
        "-Wno-shift-count-overflow",
        "-Wno-sign-compare",
        "-Wno-tautological-compare",
        "-Wno-tautological-constant-out-of-range-compare",
        "-Wno-unused-parameter",
        "-Wno-unused-result",
    ],
    local_include_dirs: ["Include"],
    target: {
        android_arm: {
            local_include_dirs: ["android_arm/pyconfig"],
        },
        android_arm64: {
            local_include_dirs: ["android_arm64/pyconfig"],
        },
        android_x86: {
            local_include_dirs: ["android_x86/pyconfig"],
        },
        linux_bionic: {
            // NB linux_bionic is a 'host' architecture but it uses the bionic libc like 'android'
            // targets so use the android pyconfig.
            local_include_dirs: ["android_x86_64/pyconfig"],
        },
        android_x86_64: {
            local_include_dirs: ["android_x86_64/pyconfig"],
        },
        // Regenerate include dirs with android_regen.sh
        darwin_x86_64: {
            local_include_dirs: ["darwin_x86_64/pyconfig"],
            cflags: [
                "-Wno-deprecated-declarations",
                "-Wno-pointer-arith",
            ],
        },
        linux_glibc_x86: {
            enabled: false,
        },
        linux_glibc_x86_64: {
            local_include_dirs: ["linux_x86_64/pyconfig"],
            cflags: ["-Werror"],
        },
        windows: {
            enabled: false,
        },
    },
    host_supported: true,
    compile_multilib: "both",
    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },
}

cc_library_static {
    name: "py2-interp-parser",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Parser/acceler.c",
        "Parser/bitset.c",
        "Parser/firstsets.c",
        "Parser/grammar.c",
        "Parser/grammar1.c",
        "Parser/listnode.c",
        "Parser/metagrammar.c",
        "Parser/myreadline.c",
        "Parser/node.c",
        "Parser/parser.c",
        "Parser/parsetok.c",
        "Parser/pgen.c",
        "Parser/tokenizer.c",
    ],
}

cc_library_static {
    name: "py2-interp-object",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Objects/abstract.c",
        "Objects/boolobject.c",
        "Objects/bufferobject.c",
        "Objects/bytes_methods.c",
        "Objects/bytearrayobject.c",
        "Objects/capsule.c",
        "Objects/cellobject.c",
        "Objects/classobject.c",
        "Objects/cobject.c",
        "Objects/codeobject.c",
        "Objects/complexobject.c",
        "Objects/descrobject.c",
        "Objects/enumobject.c",
        "Objects/exceptions.c",
        "Objects/genobject.c",
        "Objects/fileobject.c",
        "Objects/floatobject.c",
        "Objects/frameobject.c",
        "Objects/funcobject.c",
        "Objects/intobject.c",
        "Objects/iterobject.c",
        "Objects/listobject.c",
        "Objects/longobject.c",
        "Objects/dictobject.c",
        "Objects/memoryobject.c",
        "Objects/methodobject.c",
        "Objects/moduleobject.c",
        "Objects/object.c",
        "Objects/obmalloc.c",
        "Objects/rangeobject.c",
        "Objects/setobject.c",
        "Objects/sliceobject.c",
        "Objects/stringobject.c",
        "Objects/structseq.c",
        "Objects/tupleobject.c",
        "Objects/typeobject.c",
        "Objects/weakrefobject.c",
        "Objects/unicodeobject.c",
        "Objects/unicodectype.c",
    ],
}

cc_library_static {
    name: "py2-interp-python",
    defaults: ["py2-interp-defaults"],
    target: {
        linux: {
            cflags: [
                "-DPLATFORM=\"linux2\"",
            ],
        },
        darwin_x86_64: {
            cflags: [
                "-DPLATFORM=\"darwin\"",
            ],
        },
    },
    srcs: [
        "Python/_warnings.c",
        "Python/Python-ast.c",
        "Python/asdl.c",
        "Python/ast.c",
        "Python/bltinmodule.c",
        "Python/ceval.c",
        "Python/compile.c",
        "Python/codecs.c",
        "Python/errors.c",
        "Python/frozen.c",
        "Python/frozenmain.c",
        "Python/future.c",
        "Python/getargs.c",
        "Python/getcompiler.c",
        "Python/getcopyright.c",
        "Python/getplatform.c",
        "Python/getversion.c",
        "Python/graminit.c",
        "Python/import.c",
        "Python/importdl.c",
        "Python/marshal.c",
        "Python/modsupport.c",
        "Python/mystrtoul.c",
        "Python/mysnprintf.c",
        "Python/peephole.c",
        "Python/pyarena.c",
        "Python/pyctype.c",
        "Python/pyfpe.c",
        "Python/pymath.c",
        "Python/pystate.c",
        "Python/pythonrun.c",
        "Python/random.c",
        "Python/structmember.c",
        "Python/symtable.c",
        "Python/sysmodule.c",
        "Python/traceback.c",
        "Python/getopt.c",
        "Python/pystrcmp.c",
        "Python/pystrtod.c",
        "Python/dtoa.c",
        "Python/formatter_unicode.c",
        "Python/formatter_string.c",
        "Python/dynload_shlib.c",
        "Python/thread.c",
    ],
}

cc_defaults {
    name: "py2-launcher-defaults",
    defaults: ["py2-interp-defaults"],
    cflags: [
        "-DVERSION=\"2.7\"",
        "-DVPATH=\"\"",
        "-DPREFIX=\"\"",
        "-DEXEC_PREFIX=\"\"",
        "-DPYTHONPATH=\"..:\"",
        "-DANDROID_SKIP_ZIP_PATH",
        "-DANDROID_SKIP_EXEC_PREFIX_PATH",
        "-DANDROID_LIB_PYTHON_PATH=\"internal/stdlib\"",
        "-DDATE=\"Dec 31 1969\"",
        "-DTIME=\"23:59:59\"",
    ],
    static_libs: [
        "libbase",
        "libcrypto",
        "libexpat",
        "libssl",
        "libz",
    ],
    target: {
        linux_glibc_x86_64: {
            host_ldlibs: ["-lutil"],
        },
        darwin: {
            host_ldlibs: [
                "-framework SystemConfiguration",
                "-framework CoreFoundation",
            ],
        },
        host: {
            static_libs: ["libsqlite"],
        },
        // Use shared libsqlite for device side, otherwise
        // the executable size will be really huge.
        android: {
            shared_libs: ["libsqlite"],
        },
    },
}

cc_library_static {
    name: "py2-launcher-lib",
    defaults: ["py2-launcher-defaults"],
    srcs: [
        "Modules/gcmodule.c",
        "Modules/getpath.c",
        "Modules/config.c",
        "Modules/getbuildinfo.c",
        // Default built-in extension py2-c-modules.
        "Modules/threadmodule.c",
        "Modules/signalmodule.c",
        "Modules/posixmodule.c",
        "Modules/errnomodule.c",
        "Modules/pwdmodule.c",
        "Modules/_sre.c",
        "Modules/_codecsmodule.c",
        "Modules/_weakref.c",
        "Modules/zipimport.c",
        "Modules/symtablemodule.c",
        "Modules/main.c",
    ],
    // NOTE: Please update Modules/config.c if new lib get added in the static_libs.
    whole_static_libs: [
        // Be careful the order of these three static libraries below due to
        // missing symbols issues.
        "py2-interp-object",
        "py2-interp-python",
        "py2-interp-parser",
        "py2-c-module-array",
        "py2-c-module-cmath",
        "py2-c-module-math",
        "py2-c-module-_struct",
        "py2-c-module-time",
        "py2-c-module-operator",
        "py2-c-module-_testcapi",
        "py2-c-module-_random",
        "py2-c-module-_collections",
        "py2-c-module-_heapq",
        "py2-c-module-itertools",
        "py2-c-module-strop",
        "py2-c-module-_functools",
        "py2-c-module-datetime",
        "py2-c-module-_bisect",
        "py2-c-module-unicodedata",
        "py2-c-module-_io",
        "py2-c-module-fcntl",
        "py2-c-module-select",
        "py2-c-module-mmap",
        "py2-c-module-_csv",
        "py2-c-module-_socket",
        "py2-c-module-termios",
        "py2-c-module-_ssl",
        "py2-c-module-_md5",
        "py2-c-module-_sha",
        "py2-c-module-_sha256",
        "py2-c-module-_sha512",
        "py2-c-module-binascii",
        "py2-c-module-parser",
        "py2-c-module-cStringIO",
        "py2-c-module-cPickle",
        "py2-c-module-xxsubtype",
        "py2-c-module-future_builtins",
        "py2-c-module-_json",
        "py2-c-module-_hotshot",
        "py2-c-module-_lsprof",
        "py2-c-module-grp",
        "py2-c-module-syslog",
        "py2-c-module-audioop",
        "py2-c-module-resource",
        "py2-c-module-_multibytecodec",
        "py2-c-module-_codecs_kr",
        "py2-c-module-_codecs_jp",
        "py2-c-module-_codecs_cn",
        "py2-c-module-_codecs_tw",
        "py2-c-module-_codecs_hk",
        "py2-c-module-_codecs_iso2022",
        "py2-c-module-_multiprocessing",
        "py2-c-module-zlib",
        "py2-c-module-pyexpat",
        "py2-c-module-_sqlite3",
        "py2-c-module-_ctypes_test",
        "py2-c-module-_ctypes",
    ],
    target: {
        darwin: {
            whole_static_libs: ["py2-c-module-_scproxy"],
        },
    },
}

cc_binary {
    name: "py2-launcher",
    defaults: ["py2-launcher-defaults"],
    srcs: ["Launcher/launcher_main.cpp"],
    static_libs: ["py2-launcher-lib"],
}

cc_binary {
    name: "py2-launcher-autorun",
    defaults: ["py2-launcher-defaults"],
    srcs: ["Launcher/launcher_main.cpp"],
    static_libs: ["py2-launcher-lib"],
    cflags: ["-DANDROID_AUTORUN"],
}

python_binary_host {
    name: "py2-cmd",
    autorun: false,
    version: {
        py2: {
            enabled: true,
            embedded_launcher: true,
        },
        py3: {
            enabled: false,
        },
    },
}

// Enabled extension py2-c-modules.

cc_library_static {
    name: "py2-c-module-array",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/arraymodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-cmath",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/cmathmodule.c",
        "Modules/_math.c",
    ],
}

cc_library_static {
    name: "py2-c-module-math",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/mathmodule.c",
        "Modules/_math.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_struct",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_struct.c",
    ],
}

cc_library_static {
    name: "py2-c-module-time",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/timemodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-operator",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/operator.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_testcapi",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_testcapimodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_random",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_randommodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_collections",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_collectionsmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_heapq",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_heapqmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-itertools",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/itertoolsmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-strop",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/stropmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_functools",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_functoolsmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-datetime",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/datetimemodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_bisect",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_bisectmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-unicodedata",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/unicodedata.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_io",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_io/bufferedio.c",
        "Modules/_io/bytesio.c",
        "Modules/_io/fileio.c",
        "Modules/_io/iobase.c",
        "Modules/_io/_iomodule.c",
        "Modules/_io/stringio.c",
        "Modules/_io/textio.c",
    ],
    local_include_dirs: [
        "Modules/_io",
    ],
}

cc_library_static {
    name: "py2-c-module-fcntl",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/fcntlmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-select",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/selectmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-mmap",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/mmapmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_csv",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_csv.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_socket",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/socketmodule.c",
        "Modules/timemodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-termios",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/termios.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_ssl",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/_ssl.c"],
    cflags: ["-Wno-incompatible-pointer-types-discards-qualifiers"],
    static_libs: [
        "libssl",
        "libcrypto",
    ],
}

cc_library_static {
    name: "py2-c-module-_md5",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/md5module.c",
        "Modules/md5.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_sha",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/shamodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_sha256",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/sha256module.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_sha512",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/sha512module.c",
    ],
}

cc_library_static {
    name: "py2-c-module-binascii",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/binascii.c",
    ],
}

cc_library_static {
    name: "py2-c-module-parser",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/parsermodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-cStringIO",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/cStringIO.c",
    ],
}

cc_library_static {
    name: "py2-c-module-cPickle",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/cPickle.c",
    ],
}

cc_library_static {
    name: "py2-c-module-xxsubtype",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/xxsubtype.c",
    ],
}

cc_library_static {
    name: "py2-c-module-future_builtins",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/future_builtins.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_json",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_json.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_hotshot",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_hotshot.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_lsprof",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_lsprof.c",
        "Modules/rotatingtree.c",
    ],
}

cc_library_static {
    name: "py2-c-module-grp",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/grpmodule.c",
        "Modules/rotatingtree.c",
    ],
}

cc_library_static {
    name: "py2-c-module-syslog",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/syslogmodule.c",
    ],
}

cc_library_static {
    name: "py2-c-module-audioop",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/audioop.c",
    ],
}

cc_library_static {
    name: "py2-c-module-resource",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/resource.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_multibytecodec",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/cjkcodecs/multibytecodec.c",
    ],
}

cc_library_static {
    name: "py2-c-module-_codecs_kr",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/cjkcodecs/_codecs_kr.c"],
}

cc_library_static {
    name: "py2-c-module-_codecs_jp",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/cjkcodecs/_codecs_jp.c"],
}

cc_library_static {
    name: "py2-c-module-_codecs_cn",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/cjkcodecs/_codecs_cn.c"],
}

cc_library_static {
    name: "py2-c-module-_codecs_tw",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/cjkcodecs/_codecs_tw.c"],
}

cc_library_static {
    name: "py2-c-module-_codecs_hk",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/cjkcodecs/_codecs_hk.c"],
}

cc_library_static {
    name: "py2-c-module-_codecs_iso2022",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/cjkcodecs/_codecs_iso2022.c"],
}

cc_library_static {
    name: "py2-c-module-_multiprocessing",
    defaults: ["py2-interp-defaults"],
    srcs: [
        "Modules/_multiprocessing/multiprocessing.c",
        "Modules/_multiprocessing/semaphore.c",
        "Modules/_multiprocessing/socket_connection.c",
    ],
}

cc_library_static {
    name: "py2-c-module-zlib",
    defaults: [
        "py2-interp-defaults",
    ],
    cflags: [
        "-DUSE_ZLIB_CRC32",
    ],
    srcs: [
        "Modules/zlibmodule.c",
    ],
    static_libs: [
        "libz",
    ],
}

cc_library_static {
    name: "py2-c-module-pyexpat",
    defaults: [
        "py2-interp-defaults",
    ],
    cflags: [
        "-DUSE_PYEXPAT_CAPI",
    ],
    srcs: [
        "Modules/pyexpat.c",
    ],
    static_libs: [
        "libexpat",
    ],
}

cc_library_static {
    name: "py2-c-module-_sqlite3",
    defaults: [
        "py2-interp-defaults",
    ],
    cflags: [
        "-DMODULE_NAME=\"sqlite3\"",
        "-DSQLITE_OMIT_LOAD_EXTENSION",
        "-Wno-format-security",
        "-Wno-type-limits",
        "-Wno-char-subscripts",
    ],
    local_include_dirs: [
        "Modules/_sqlite",
    ],
    srcs: [
        "Modules/_sqlite/cache.c",
        "Modules/_sqlite/connection.c",
        "Modules/_sqlite/cursor.c",
        "Modules/_sqlite/microprotocols.c",
        "Modules/_sqlite/module.c",
        "Modules/_sqlite/prepare_protocol.c",
        "Modules/_sqlite/row.c",
        "Modules/_sqlite/statement.c",
        "Modules/_sqlite/util.c",
    ],
    target: {
        host: {
            static_libs: [
                "libsqlite",
            ],
        },
        android: {
            shared_libs: [
                "libsqlite",
            ],
        },
    },
}

cc_library_static {
    name: "py2-c-module-_ctypes_test",
    defaults: ["py2-interp-defaults"],
    srcs: ["Modules/_ctypes/_ctypes_test.c"],
}

cc_library_static {
    name: "py2-c-module-_ctypes",
    defaults: [
        "py2-interp-defaults",
    ],
    local_include_dirs: [
        "Modules/_ctypes/libffi/include",
    ],
    srcs: [
        "Modules/_ctypes/_ctypes.c",
        "Modules/_ctypes/callbacks.c",
        "Modules/_ctypes/callproc.c",
        "Modules/_ctypes/stgdict.c",
        "Modules/_ctypes/cfield.c",
        "Modules/_ctypes/libffi/src/prep_cif.c",
        "Modules/_ctypes/libffi/src/closures.c",
    ],
    arch: {
        x86_64: {
            local_include_dirs: [
                "Modules/_ctypes/libffi/src/x86",
            ],
            srcs: [
                "Modules/_ctypes/libffi/src/x86/ffi64.c",
                "Modules/_ctypes/libffi/src/x86/ffi.c",
                "Modules/_ctypes/libffi/src/x86/sysv.S",
            ],
        },
        x86: {
            local_include_dirs: [
                "Modules/_ctypes/libffi/src/x86",
            ],
            srcs: [
                "Modules/_ctypes/libffi/src/x86/ffi.c",
                "Modules/_ctypes/libffi/src/x86/sysv.S",
            ],
        },
        arm: {
            local_include_dirs: [
                "android_arm/libffi",
                "Modules/_ctypes/libffi/src/arm",
            ],
            srcs: [
                "Modules/_ctypes/libffi/src/arm/ffi.c",
                "Modules/_ctypes/libffi/src/arm/sysv.S",
                "Modules/_ctypes/libffi/src/arm/trampoline.S",
            ],
        },
        arm64: {
            // arithmetic on a pointer in _ctypes/libffi/src/aarch64/ffi.c
            cflags: ["-Wno-pointer-arith"],
            local_include_dirs: [
                "android_arm64/libffi",
                "Modules/_ctypes/libffi/src/aarch64",
            ],
            srcs: [
                "Modules/_ctypes/libffi/src/aarch64/ffi.c",
                "Modules/_ctypes/libffi/src/aarch64/sysv.S",
            ],
        },
    },
    target: {
        // Regenerate include dirs with android_regen.sh
        darwin_x86_64: {
            local_include_dirs: ["darwin_x86_64/libffi"],
            srcs: [
                "Modules/_ctypes/libffi/src/x86/darwin.S",
                "Modules/_ctypes/libffi/src/x86/darwin64.S",
            ],
        },
        linux_bionic: {
            local_include_dirs: ["linux_x86_64/libffi"],
            srcs: [
                "Modules/_ctypes/libffi/src/x86/unix64.S",
            ],
        },
        linux_glibc_x86_64: {
            local_include_dirs: ["linux_x86_64/libffi"],
            srcs: [
                "Modules/_ctypes/libffi/src/x86/unix64.S",
            ],
        },
        android_x86: {
            local_include_dirs: ["android_x86/libffi"],
            srcs: [
                "Modules/_ctypes/libffi/src/x86/win32.S",
            ],
        },
        android_x86_64: {
            local_include_dirs: ["android_x86_64/libffi"],
            srcs: [
                "Modules/_ctypes/libffi/src/x86/unix64.S",
            ],
        },
    },
}

cc_library_host_static {
    name: "py2-c-module-_scproxy",
    defaults: ["py2-interp-defaults"],
    srcs: ["Mac/Modules/_scproxy.c"],
    target: {
        linux: {
            enabled: false,
        },
    },
}

进入编译环境,用android标准的mm命令编译即可

在python的launcher_main.cpp中做了一些修改,设置了些path路径

setenv(const_cast<char *>("PYTHONPATH"), const_cast<char *>("/system/lib/python2.7:/vendor/lib/python2.7"), 0);

这样不用去设置环境变量就可以用了。

编译py2-launcher出来后,将其重新命名为python。

将其push到/system/bin或者/vendor/bin就可以了,但是现在还运行不起来,因为缺少标准库

将python源码中的Lib文件夹拷贝出来,重新命名python2.7,将其push到/system/lib或者/vendor/lib,这样就将其和自己前面设置的PYTHONPATH对应起来了,此时再运行python,完美~~

附:源码和编译好的结果我保存在了这里,需要的可以去下载
https://download.csdn.net/download/snomy/88922834?spm=1001.2014.3001.5503

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值