当前位置: 首页 > news >正文

网站301设置宁波建站公司哪家服务好

网站301设置,宁波建站公司哪家服务好,wordpress加备案号,背景墙素材高清图片免费Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法#xff1a;2、灵活性#xff1a;3、版本兼容性#xff1a;4、向后兼容性#xff1a;5、编译区…Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法2、灵活性3、版本兼容性4、向后兼容性5、编译区别 四、Android.mk和Android.bp的转换1、androidmk源码2、源码环境使用命令把Android.mk转换成Android.bp1具体命令是2具体操作3转换示例4Android.mk无法编译成Android.bp举例①比如Android.mk里面的shell语句命令Android.bp是无法实现的②比如Android.mk中的 LOCAL_PREBUILT_JNI_LIBS 属性是无法转换到Android.bp直接转换会报 3、Android.mk转换成Android.bp主要内容 五、其他1、其他文章 Android.mk和bp 对应关系、转换博客介绍2、以个人的理解来看为啥要把Android.mk都替换成Android.bp3、Android.mk和Android.bp同时存在一个目录的编译情况4、Android.mk转换成Android.bp的限制5、Android.mk转换成Android.bp经验小结 一、前言 简单的说 Android.mk和Android.bp都是用来编译出类库.jar,应用文件.apk动态库.so静态库.a等等作用。 Android.mk就是一个GNU make语法的脚本文件。 Android.bp文件是Android 7.0及更高版本中引入的一种构建脚本文件是使用Starlark语法编写的它是一种基于Python的轻量级脚本语言。 他们的关系如下 上面流程图的解读 ninja是一个编译框架系统会根据相应的ninja格式的配置文件进行编译。 系统编译那些应用相关的模块实际上是读取一个个ninja配置进行编译 Android.mk通过Kati工具可以转换成ninja配置文件 Android.bp通过BlueprintSoong工具转换成ninja配置文件 Android.mk–Android.bp 指的是mk可以通过androidmk工具编译成bp文件 在实际编译中会不会把Android.mk先编译成Android.bp处理 只是知道他们之间的关系其实是没有多大用处的只是让你对他们的知识心里有个底 真正的是要分别学会脚本文件的编写和学会转换使用脚本文件。 比如你获取到的是一个mk文件你要转换成bp文件就要学习一定的内容才能完成。 Android.mk详解入门必备 https://blog.csdn.net/wenzhi20102321/article/details/135631544 Android.bp详解入门必备 https://blog.csdn.net/wenzhi20102321/article/details/135631671 从实际开发中接触到的Android8-13 package相关源码看 Android9以及之前的代码之前基本没怎么看到有Android.bp文件的使用 Android11的代码有一半左右的应用编译脚本使用的是Android.bp, Android13的代码中90%以上的应用编译都是使用的Android.bp, 所以从Android代码迭代趋势看得出 Android.bp是大趋势对于编译Android源码来说是要必须掌握的。 总的来说本文应该是全网介绍Android.mk和Android.bp知识最全面的一篇文章有需要的可以收藏使用。 二、Android.mk和Android.bp的联系 Android.mk和Android.bp是Android开发中使用的两种构建文件格式。 Android.mk是旧版本的构建文件格式使用GNU Make语法用于定义和配置Android应用或库的构建过程和依赖关系。它是基于Make工具的脚本文件通过定义模块、源文件、编译选项和依赖关系等内容来完成构建过程。 Android.bp是新一代的构建文件格式使用类似于Python的语法用于定义和配置Android应用或库的构建过程和依赖关系。它是基于Soong构建系统的脚本文件通过定义模块、源文件、编译选项和依赖关系等内容来完成构建过程。 Android.bp相对于Android.mk具有更强大的功能和更灵活的语法。它支持模块的继承、条件构建、模块分割和动态选择等特性使构建过程更加可控和可配置。 在Android的构建系统中Android.mk和Android.bp可以共存但建议使用Android.bp来编写新的构建文件以便发挥其更多的优势和功能。同时Soong构建系统也提供了工具和规则来自动将Android.mk转换为对应的Android.bp文件以便进行平滑的迁移和兼容。 三、Android.mk和Android.bp的区别 1、语法 Android.mk使用GNU make语法而Android.bp使用Starlark语法。Starlark是一种基于Python的轻量级脚本语言。 2、灵活性 相对于Android.mkAndroid.bp在模块定义、依赖关系和编译选项等方面更加灵活和易于维护。Android.bp具有更强大的表达能力可以更好地处理复杂的项目结构和构建需求。 Android.bp 只是纯粹的配置文件(类似json)不包括分支、循环等流程控制 (如果想要进行分支循环控制可自己写 go 来完成)因此 Android.bp 文件被转化成 ninja 文件的效率远远高于 Android.mk 文件。 3、版本兼容性 Android.mk适用于Android的早期版本而Android.bp适用于Android 7.0及更高版本。在新版Android中建议使用Android.bp来管理和构建项目。 4、向后兼容性 Android.bp仅在Android 7.0及更高版本引入而Android.mk仍然可以继续使用。为了保持向后兼容性Android构建系统可以同时支持Android.mk和Android.bp文件可以在同一个项目中同时使用两种格式的构建文件。 综上所述Android.mk和Android.bp是两种不同版本的Android构建脚本文件它们之间有一定的关系和区别。Android.bp是更加灵活和推荐的构建脚本文件在较新的Android版本中使用。但为了向后兼容性Android.mk仍然可以继续使用并且可以与Android.bp文件同时存在于同一个项目中。 5、编译区别 **ninja**是一个编译框架会根据相应的ninja格式的配置文件进行编译但是ninja文件一般不会手动修改而是通过将 Android.bp文件转换成ninja格文件来编译1**Android.bp**是纯粹的配置没有分支、循环等流程控制不能做算数逻辑运算。如果需要控制逻辑那么只能通过Go语言编写2. **Soong**类似于之前的Makefile编译系统的核心负责提供Android.bp语义解析并将之转换成Ninja文件。Soong还会编译生成一个androidmk命令用于将Android.mk文件转换为Android.bp文件3. **Blueprint**是生成、解析Android.bp的工具是Soong的一部分。Soong负责Android编译而设计的工具而Blueprint只是解析文件格式Soong解析内容的具体含义。Blueprint和Soong都是由Golang写的项目从Android 7.0prebuilts/go/目录下新增Golang所需的运行环境在编译时使用4. **kati**是专为Android开发的一个基于Golang和C的工具主要功能是把Android中的Android.mk文件转换成Ninja文件。代码路径是build/kati/编译后的产物是ckati上面介绍的都是一些概念知识下面涉及到的代码介绍才是实际开发有有用的知识。 四、Android.mk和Android.bp的转换 Google 提供了 androidmk 工具可以将 Android.mk 转换为 Android.bp。 但是这个工具目前还不完善不能处理 Android.mk 中的宏开关。 Android.mk里面有些复杂用法也可能在Android.bp里面未定义使用。 1、androidmk源码 androidmk 的源码在 build/soong/androidmk 目录下 这里看到 androidmk 是一个文件夹里面主要功能文件是android.go 这个 android.go 文件里面包含了Android.mk 转换成 Android.bp 的对应关系 比如 func init() {addStandardProperties(bpparser.StringType,//前面的是Android.mk的关键字后面是Android.bp 的关键字map[string]string{LOCAL_MODULE: name, //mk文件和bp文件模块名称定义的关键字LOCAL_CERTIFICATE: certificate,//是否系统签名LOCAL_JAVA_LANGUAGE_VERSION: java_version,LOCAL_INSTRUMENTATION_FOR: instrumentation_for,LOCAL_MANIFEST_FILE: manifest, ...})android.go文件全部内容查看 http://aospxref.com/android-13.0.0_r3/xref/build/soong/androidmk/androidmk/android.go 2、源码环境使用命令把Android.mk转换成Android.bp 1具体命令是 androidmk Android.mk Android.bp 2具体操作 androidmk 是系统编译生成的工具androidmk 工具可以将 Android.mk 文件 转换为 Android.bp 文件 如果编译过的源码可以进行如下操作使用命令把Android.mk 文件 转换为 Android.bp 文件 1找到androidmk工具文件cd到对该目录下我这里是release/out/host/linux-x86/bin 2把需要转换的Android.mk文件复制到 androidmk的bin目录下 3执行命令androidmk Android.mk Android.bp 就可以在bin目录下看到一个新生成的Android.bp文件了这个就是系统工具转换的Android.bp文件。亲测有效。3转换示例 Android.mk 示例代码 LOCAL_PATH : $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE : MyFileManager LOCAL_MODULE_CLASS : APPS LOCAL_MODULE_TAGS : optional LOCAL_SRC_FILES : MyFileManager.apkLOCAL_PRIVILEGED_MODULE : true LOCAL_CERTIFICATE : platforminclude $(BUILD_PREBUILT)Android.bp转换后的代码 android_app_import {name: MyFileManager, //(1)编译模块名称certificate: platform, //2系统签名privileged: true, //3是否生成到priv-app目录apk: MyFileManager.apk, //(4)加载需要编译的apk名称}上面代码的转换就是通过 androidmk工具进行转换的。 这里可以看到Android.bp更加简洁明了并且省略了一些非必要的信息。 上面转换的信息是可以在android.go中看出对应关系具体对应关系查找 func init() {//string 类型的关键字addStandardProperties(bpparser.StringType,//前面的是Android.mk的关键字后面是Android.bp 的关键字map[string]string{LOCAL_MODULE: name, //1mk文件和bp文件模块名称定义的关键字LOCAL_CERTIFICATE: certificate,//2系统签名LOCAL_JAVA_LANGUAGE_VERSION: java_version,LOCAL_INSTRUMENTATION_FOR: instrumentation_for,LOCAL_MANIFEST_FILE: manifest, ...})//boolean 类型关键字addStandardProperties(bpparser.BoolType,map[string]string{// Bool propertiesLOCAL_IS_HOST_MODULE: host,LOCAL_CLANG: clang,LOCAL_PRIVILEGED_MODULE: privileged, //(3)是否生成在priv-app目录。。。}var prebuiltTypes map[string]string{SHARED_LIBRARIES: cc_prebuilt_library_shared,STATIC_LIBRARIES: cc_prebuilt_library_static,EXECUTABLES: cc_prebuilt_binary,JAVA_LIBRARIES: java_import,APPS: android_app_import, //(4)加载需要编译的apk名称ETC: prebuilt_etc, }func prebuiltClass(ctx variableAssignmentContext) error {class : ctx.mkvalue.Value(ctx.file.scope)if _, ok : prebuiltTypes[class]; ok {ctx.file.scope.Set(BUILD_PREBUILT, class)} else {// reset to defaultctx.file.scope.Set(BUILD_PREBUILT, prebuilt)}return nil } 但是从android.go 是看不出 BUILD_PREBUILT 的对应关系是 android_app_import。 并且从网上也是搜索 BUILD_PREBUILT 的对应关系说是 cc_prebuilt 其实是不对的 所以网上搜索都的很对不能直接使用只能参考使用。 另外Android.mk 并不是所有的语句都能转换成Android.bp, 4Android.mk无法编译成Android.bp举例 ①比如Android.mk里面的shell语句命令Android.bp是无法实现的 APK_FILE_PATH : $(shell cd $(LOCAL_PATH)/$(1) ; \find ./ -maxdepth 1 -name *.apk -and -not -name .*) LOCAL_SRC_FILES : $(APK_FILE_PATH)上面的是Android.mk中查找当前目录下的一个以apk命名结尾的文件并设置成需要编译的apk文件 还有文件复制查找遍历那些语句在Android.bp是无法实现的。 ②比如Android.mk中的 LOCAL_PREBUILT_JNI_LIBS 属性是无法转换到Android.bp直接转换会报 错 // ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_PREBUILT_JNI_LIBS虽然使用androidmk工具转换不了并且在android.go文件也未查询到对应关系的字符串 但是通过网上搜索使用 cc_prebuilt_library_shared 模块类型可以替换转换如下 //Android.mk中的引用定义 LOCAL_PREBUILT_JNI_LIBS: \ lib/armeabi-v7a/libvvo.so \ lib/armeabi-v7a/libvff.so \//Android.bp中的引用定义 cc_prebuilt_library_shared {name: libvvo,srcs: [lib/armeabi-v7a/libvvo.so], }cc_prebuilt_library_shared {name: libvff,srcs: [lib/armeabi-v7a/libvff.so], }但是编译发现还是会报错 FAILED: out/target/product/rk3588_t/obj/SHARED_LIBRARIES/libvvo_intermediates/check_elf_files.timestamp /bin/bash -c (rm -f out/target/product/rk3588_t/obj/SHARED_LIBRARIES/libvvo_intermediates/check_elf_files.timestamp ) (build/make/tools/check_elf_file.py --skip-bad-elf-magic --skip-unknown-elf-machine --soname libvvo.so --shared-lib out/target/product/rk3588_t/obj/SHARED_LIBRARIES/libc_intermediates/libc.so --shared-lib out/target/product/rk3588_t/obj/SHARED_LIBRARIES/libc_intermediates/libc.so --shared-lib out/target/product/rk3588_t/obj/SHARED_LIBRARIES/libm_intermediates/libm.so --shared-lib out/target/product/rk3588_t/obj/SHARED_LIBRARIES/libdl_intermediates/libdl.so --system-shared-lib libc --system-shared-lib libm --system-shared-lib libdl --llvm-readobjprebuilts/clang/host/linux-x86/clang-r450784d/bin/llvm-readobj out/soong/.intermediates/packages/SkgApps/EShare/libvvo/android_arm64_armv8-a_shared/libvvo.so ) (touch out/target/product/rk3588_t/obj/SHARED_LIBRARIES/libvvo_intermediates/check_elf_files.timestamp ) out/soong/.intermediates/packages/SkgApps/EShare/libvvo/android_arm64_armv8-a_shared/libvvo.so: error: DT_SONAME lib1686494415-6485dccfd4c35_20230611224257.so must be equal to the file name libvvo.so.这个报错搞不定啊涉及到具体编译规则的问题所以不去做过多挣扎了。 对于比较复杂的so编译情况Android.bp并未完善相关语句所以这种情况还是继续使用Android.mk编译即可。 3、Android.mk转换成Android.bp主要内容 上面已经说了转换的关系是在 android.go 里面有体现下面是主要转换的信息 //(1)编译的变量属性定义包括String、列表、Boolean类型就这三种变量类型没有什么数字浮点数那些。 func init() {addStandardProperties(bpparser.StringType,map[string]string{LOCAL_MODULE: name,LOCAL_CXX_STL: stl,LOCAL_MULTILIB: compile_multilib,LOCAL_ARM_MODE_HACK: instruction_set,LOCAL_SDK_VERSION: sdk_version,LOCAL_MIN_SDK_VERSION: min_sdk_version,LOCAL_NDK_STL_VARIANT: stl,LOCAL_JAR_MANIFEST: manifest,LOCAL_CERTIFICATE: certificate,LOCAL_CERTIFICATE_LINEAGE: lineage,LOCAL_PACKAGE_NAME: name,LOCAL_MODULE_RELATIVE_PATH: relative_install_path,LOCAL_PROTOC_OPTIMIZE_TYPE: proto.type,LOCAL_MODULE_OWNER: owner,LOCAL_RENDERSCRIPT_TARGET_API: renderscript.target_api,LOCAL_JAVA_LANGUAGE_VERSION: java_version,LOCAL_INSTRUMENTATION_FOR: instrumentation_for,LOCAL_MANIFEST_FILE: manifest,LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING: dex_preopt.profile,LOCAL_TEST_CONFIG: test_config,LOCAL_RRO_THEME: theme,})addStandardProperties(bpparser.ListType,map[string]string{LOCAL_SRC_FILES: srcs,LOCAL_SRC_FILES_EXCLUDE: exclude_srcs,LOCAL_HEADER_LIBRARIES: header_libs,LOCAL_SHARED_LIBRARIES: shared_libs,LOCAL_STATIC_LIBRARIES: static_libs,LOCAL_WHOLE_STATIC_LIBRARIES: whole_static_libs,LOCAL_SYSTEM_SHARED_LIBRARIES: system_shared_libs,LOCAL_USES_LIBRARIES: uses_libs,LOCAL_OPTIONAL_USES_LIBRARIES: optional_uses_libs,LOCAL_ASFLAGS: asflags,LOCAL_CLANG_ASFLAGS: clang_asflags,LOCAL_COMPATIBILITY_SUPPORT_FILES: data,LOCAL_CONLYFLAGS: conlyflags,LOCAL_CPPFLAGS: cppflags,LOCAL_REQUIRED_MODULES: required,LOCAL_HOST_REQUIRED_MODULES: host_required,LOCAL_TARGET_REQUIRED_MODULES: target_required,LOCAL_OVERRIDES_MODULES: overrides,LOCAL_LDLIBS: host_ldlibs,LOCAL_CLANG_CFLAGS: clang_cflags,LOCAL_YACCFLAGS: yacc.flags,LOCAL_SANITIZE_RECOVER: sanitize.recover,LOCAL_LOGTAGS_FILES: logtags,LOCAL_EXPORT_HEADER_LIBRARY_HEADERS: export_header_lib_headers,LOCAL_EXPORT_SHARED_LIBRARY_HEADERS: export_shared_lib_headers,LOCAL_EXPORT_STATIC_LIBRARY_HEADERS: export_static_lib_headers,LOCAL_INIT_RC: init_rc,LOCAL_VINTF_FRAGMENTS: vintf_fragments,LOCAL_TIDY_FLAGS: tidy_flags,// TODO: This is comma-separated, not space-separatedLOCAL_TIDY_CHECKS: tidy_checks,LOCAL_RENDERSCRIPT_INCLUDES: renderscript.include_dirs,LOCAL_RENDERSCRIPT_FLAGS: renderscript.flags,LOCAL_JAVA_RESOURCE_DIRS: java_resource_dirs,LOCAL_JAVA_RESOURCE_FILES: java_resources,LOCAL_JAVACFLAGS: javacflags,LOCAL_ERROR_PRONE_FLAGS: errorprone.javacflags,LOCAL_DX_FLAGS: dxflags,LOCAL_JAVA_LIBRARIES: libs,LOCAL_STATIC_JAVA_LIBRARIES: static_libs,LOCAL_JNI_SHARED_LIBRARIES: jni_libs,LOCAL_AAPT_FLAGS: aaptflags,LOCAL_PACKAGE_SPLITS: package_splits,LOCAL_COMPATIBILITY_SUITE: test_suites,LOCAL_OVERRIDES_PACKAGES: overrides,LOCAL_ANNOTATION_PROCESSORS: plugins,LOCAL_PROGUARD_FLAGS: optimize.proguard_flags,LOCAL_PROGUARD_FLAG_FILES: optimize.proguard_flags_files,// These will be rewritten to libs/static_libs by bpfix, after their presence is used to convert// java_library_static to android_library.LOCAL_SHARED_ANDROID_LIBRARIES: android_libs,LOCAL_STATIC_ANDROID_LIBRARIES: android_static_libs,LOCAL_ADDITIONAL_CERTIFICATES: additional_certificates,// Jacoco filters:LOCAL_JACK_COVERAGE_INCLUDE_FILTER: jacoco.include_filter,LOCAL_JACK_COVERAGE_EXCLUDE_FILTER: jacoco.exclude_filter,LOCAL_FULL_LIBS_MANIFEST_FILES: additional_manifests,// will be rewrite later to license_kinds: by byfixLOCAL_LICENSE_KINDS: android_license_kinds,// will be removed later by byfix// TODO: does this property matter in the license module?LOCAL_LICENSE_CONDITIONS: android_license_conditions,LOCAL_GENERATED_SOURCES: generated_sources,})addStandardProperties(bpparser.BoolType,map[string]string{// Bool propertiesLOCAL_IS_HOST_MODULE: host,LOCAL_CLANG: clang,LOCAL_FORCE_STATIC_EXECUTABLE: static_executable,LOCAL_NATIVE_COVERAGE: native_coverage,LOCAL_NO_CRT: nocrt,LOCAL_ALLOW_UNDEFINED_SYMBOLS: allow_undefined_symbols,LOCAL_RTTI_FLAG: rtti,LOCAL_PACK_MODULE_RELOCATIONS: pack_relocations,LOCAL_TIDY: tidy,LOCAL_USE_CLANG_LLD: use_clang_lld,LOCAL_PROPRIETARY_MODULE: proprietary,LOCAL_VENDOR_MODULE: vendor,LOCAL_ODM_MODULE: device_specific,LOCAL_PRODUCT_MODULE: product_specific,LOCAL_PRODUCT_SERVICES_MODULE: product_specific,LOCAL_SYSTEM_EXT_MODULE: system_ext_specific,LOCAL_EXPORT_PACKAGE_RESOURCES: export_package_resources,LOCAL_PRIVILEGED_MODULE: privileged,LOCAL_AAPT_INCLUDE_ALL_RESOURCES: aapt_include_all_resources,LOCAL_DONT_MERGE_MANIFESTS: dont_merge_manifests,LOCAL_USE_EMBEDDED_NATIVE_LIBS: use_embedded_native_libs,LOCAL_USE_EMBEDDED_DEX: use_embedded_dex,LOCAL_DEX_PREOPT: dex_preopt.enabled,LOCAL_DEX_PREOPT_APP_IMAGE: dex_preopt.app_image,LOCAL_DEX_PREOPT_GENERATE_PROFILE: dex_preopt.profile_guided,LOCAL_PRIVATE_PLATFORM_APIS: platform_apis,LOCAL_JETIFIER_ENABLED: jetifier,LOCAL_IS_UNIT_TEST: unit_test,LOCAL_ENFORCE_USES_LIBRARIES: enforce_uses_libs,LOCAL_CHECK_ELF_FILES: check_elf_files,}) }//2编译的模块类型定义 var moduleTypes map[string]string{BUILD_SHARED_LIBRARY: cc_library_shared,BUILD_STATIC_LIBRARY: cc_library_static,BUILD_HOST_SHARED_LIBRARY: cc_library_host_shared,BUILD_HOST_STATIC_LIBRARY: cc_library_host_static,BUILD_HEADER_LIBRARY: cc_library_headers,BUILD_EXECUTABLE: cc_binary,BUILD_HOST_EXECUTABLE: cc_binary_host,BUILD_NATIVE_TEST: cc_test,BUILD_HOST_NATIVE_TEST: cc_test_host,BUILD_NATIVE_BENCHMARK: cc_benchmark,BUILD_HOST_NATIVE_BENCHMARK: cc_benchmark_host,BUILD_JAVA_LIBRARY: java_library_installable, // will be rewritten to java_library by bpfixBUILD_STATIC_JAVA_LIBRARY: java_library,BUILD_HOST_JAVA_LIBRARY: java_library_host,BUILD_HOST_DALVIK_JAVA_LIBRARY: java_library_host_dalvik,BUILD_PACKAGE: android_app,BUILD_RRO_PACKAGE: runtime_resource_overlay,BUILD_CTS_EXECUTABLE: cc_binary, // will be further massaged by bpfix depending on the output pathBUILD_CTS_SUPPORT_PACKAGE: cts_support_package, // will be rewritten to android_test by bpfixBUILD_CTS_PACKAGE: cts_package, // will be rewritten to android_test by bpfixBUILD_CTS_TARGET_JAVA_LIBRARY: cts_target_java_library, // will be rewritten to java_library by bpfixBUILD_CTS_HOST_JAVA_LIBRARY: cts_host_java_library, // will be rewritten to java_library_host by bpfix }//(3)预编译类型定义 var prebuiltTypes map[string]string{SHARED_LIBRARIES: cc_prebuilt_library_shared,STATIC_LIBRARIES: cc_prebuilt_library_static,EXECUTABLES: cc_prebuilt_binary,JAVA_LIBRARIES: java_import,APPS: android_app_import,ETC: prebuilt_etc, } 整个android.go主要转换就看上面三个部分func init() 、var moduleTypes、var prebuiltTypes。 这里就不一一介绍了用到的时候进行对比就行了。 android.go文件全部内容查看 [http://aospxref.com/android-13.0.0_r3/xref/build/soong/androidmk/androidmk/android.go]( 五、其他 1、其他文章 Android.mk和bp 对应关系、转换博客介绍 https://blog.csdn.net/amin_hui/article/details/116610959 2、以个人的理解来看为啥要把Android.mk都替换成Android.bp 1从上面代码示例看Android.mk代码格式是比较混乱的Android.bp代码格式清晰明了2Android.mk的定义都是大写的比较塑料Android.bp的定义都是小写的通俗易懂3加快代码加载问题Android.mk 的代码格式比 xml格式还老一些是要优化掉了。 写过数据文件加载的都知道json解析比xml解析和使用更加方便快捷并且数据结构也更加清晰明了 何况比xml还旧的代码格式更新换代是一个必然的结果。其他原因也是有的这里只是一点点理解而已3、Android.mk和Android.bp同时存在一个目录的编译情况 当一个Android目录同时包含Android.mk和Android.bp文件时Android编译系统会自动检测到这两个构建文件并根据不同的规则进行编译。 1. 首先Android编译系统会检测目录中是否存在Android.bp文件如果存在则优先使用Android.bp进行构建。 2. 如果目录中不存在Android.bp文件或者存在但是有语法错误Android编译系统会尝试使用Android.mk进行构建。 3. 如果目录中同时存在有效的Android.bp和Android.mk文件Android编译系统会根据以下规则选择使用哪个构建文件- 如果使用者在构建命令中指定了特定的构建文件例如通过mm命令指定Android.mk则系统会使用指定的构建文件。- 如果没有指定特定的构建文件Android编译系统会根据优先级选择使用Android.bp或Android.mk进行构建。一般来说Android.bp的优先级更高因为它是新的构建文件格式。综上所述如果你的目录同时包含Android.mk和Android.bp文件Android编译系统会优先使用Android.bp进行构建如果Android.bp不存在或有错误才会回退到使用Android.mk进行构建。但是可以通过命令行参数显式指定使用哪个构建文件进行编译。 4、Android.mk转换成Android.bp的限制 1Android源码可以使用androidmk工具把Android.mk转换成Android.bp文件 2Android.bp只是一个配置文件而Android.mk是可以执行一些控制逻辑所有有些语句是无法转换的 比如文件的遍历条件判断等等代码是无法在Android.bp中执行的 3Android.mk到Android.bp有部分属性是找不到对应关系的有些是暂时无法替换的比如LOCAL_PREBUILT_JNI_LIBS 主要是很多so编译相关的属性在bp中都还未完善。5、Android.mk转换成Android.bp经验小结 1如果是比较简单的代码直接使用android.go文件对比转换即可2可以参考androidmk工具转换的Android.bp文件,代码会更加简洁因为转换后系统默认的变量会被自动省略掉所以看起来会简洁很多但是也不能完全依赖androidmk工具即使工具有时候也会出现不准确的情况出现编译报错的情况可能需要手动适配修改3Android 所有新版本都是兼容 Android.mk 文件编译的如果是比较复杂的Android.mk并且涉及到so文件依赖的脚步需要移植到新版本一般直接复制过去使用就行因为不一定能修改成Android.bp。
http://www.pierceye.com/news/209357/

相关文章:

  • 立方米网站建设做淘宝客网站用什么程序好
  • 怎样做网站挣钱建筑资料软件
  • 涿州建设局网站苏州市高新区建设局网站
  • 个人soho要怎么做企业网站成都包装设计公司
  • 网站开发 chrome浏览器崩溃ruhe用dw做网站
  • 全屏网站 图片优化个人网站cms系统
  • 做我女朋友程序网站邵东做网站
  • 建设网站如何挂到网上wordpress首页添加幻灯
  • 汕头正规网站建设模板总部城乡建设网站 资料员
  • vs 2017c 怎么建设网站网站建设的数字化和互联网化
  • 南昌网站设计公司海南营销网站建设
  • 购物网站素材个人搭建网站教程
  • 青岛网站建设哪里好模板建站服务公司
  • 青色网站欣赏wordpress中文购物
  • 建站培训全国住房与城乡建设部网站
  • 唐山网站建设方案策划沧州网站建设联系电话
  • 网页制作和网站开发实验报告logo设计品牌
  • 摄影后期教程网站百度指数1000搜索量有多少
  • wp网站建设模板什么是网站的原型
  • 园林绿化网站建设上海著名室内设计公司
  • 大连市住房与城乡建设部网站公司要制作网站
  • 郑州做网站七彩科技企业网站做的漂亮
  • 如何用ps做网站页面设计企业网站备案价格
  • 禅城网站建设价格青岛企业自助建站系统
  • 平阳住房和城乡建设厅网站建设银行龙卡信用卡在境外网站支付
  • 关于网站开发的论文软件开发合同模板免费
  • 军队房地产与建设工程法律实务在哪个网站可以购买深圳市盐田区住房建设局网站
  • 网站虚拟主机空间喊别人做的网站不肯给代码
  • 导游是什么商丘seo公司
  • 25个网站网页怎么截图