Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: build/config/android/rules.gni

Issue 2570313002: Use R.txt from AAR to generate R.java for it when building APK. (Closed)
Patch Set: Added workaround for aars with empty R.txt and no resources. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/config/android/internal_rules.gni ('k') | chrome/android/java/proguard.flags » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # Do not add any imports to non-//build directories here. 5 # Do not add any imports to non-//build directories here.
6 # Some projects (e.g. V8) do not have non-build directories DEPS'ed in. 6 # Some projects (e.g. V8) do not have non-build directories DEPS'ed in.
7 import("//build/config/android/config.gni") 7 import("//build/config/android/config.gni")
8 import("//build/config/android/internal_rules.gni") 8 import("//build/config/android/internal_rules.gni")
9 import("//build/config/compiler/compiler.gni") 9 import("//build/config/compiler/compiler.gni")
10 import("//build/config/dcheck_always_on.gni") 10 import("//build/config/dcheck_always_on.gni")
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 # android_manifest: AndroidManifest.xml for this target. Defaults to 639 # android_manifest: AndroidManifest.xml for this target. Defaults to
640 # //build/android/AndroidManifest.xml. 640 # //build/android/AndroidManifest.xml.
641 # android_manifest_dep: Target that generates AndroidManifest (if applicable ) 641 # android_manifest_dep: Target that generates AndroidManifest (if applicable )
642 # custom_package: java package for generated .java files. 642 # custom_package: java package for generated .java files.
643 # v14_skip: If true, don't run v14 resource generator on this. Defaults to 643 # v14_skip: If true, don't run v14 resource generator on this. Defaults to
644 # false. (see build/android/gyp/generate_v14_compatible_resources.py) 644 # false. (see build/android/gyp/generate_v14_compatible_resources.py)
645 # shared_resources: If true make a resource package that can be loaded by a 645 # shared_resources: If true make a resource package that can be loaded by a
646 # different application at runtime to access the package's resources. 646 # different application at runtime to access the package's resources.
647 # app_as_shared_lib: If true make a resource package that can be loaded as 647 # app_as_shared_lib: If true make a resource package that can be loaded as
648 # both shared_resources and normal application. 648 # both shared_resources and normal application.
649 # r_text_file: (optional) path to pre-generated R.txt to be used when
650 # generating R.java instead of resource-based aapt-generated one.
649 651
650 # Example: 652 # Example:
651 # android_resources("foo_resources") { 653 # android_resources("foo_resources") {
652 # deps = [":foo_strings_grd"] 654 # deps = [":foo_strings_grd"]
653 # resource_dirs = ["res"] 655 # resource_dirs = ["res"]
654 # custom_package = "org.chromium.foo" 656 # custom_package = "org.chromium.foo"
655 # } 657 # }
656 # 658 #
657 # android_resources("foo_resources_overrides") { 659 # android_resources("foo_resources_overrides") {
658 # deps = [":foo_resources"] 660 # deps = [":foo_resources"]
659 # resource_dirs = ["res_overrides"] 661 # resource_dirs = ["res_overrides"]
660 # } 662 # }
661 template("android_resources") { 663 template("android_resources") {
662 set_sources_assignment_filter([]) 664 set_sources_assignment_filter([])
663 forward_variables_from(invoker, [ "testonly" ]) 665 forward_variables_from(invoker, [ "testonly" ])
664 666
665 assert(defined(invoker.resource_dirs)) 667 assert(defined(invoker.resource_dirs))
666 668
667 base_path = "$target_gen_dir/$target_name" 669 base_path = "$target_gen_dir/$target_name"
668 zip_path = base_path + ".resources.zip" 670 zip_path = base_path + ".resources.zip"
669 srcjar_path = base_path + ".srcjar" 671 srcjar_path = base_path + ".srcjar"
670 r_text_path = base_path + "_R.txt" 672 r_text_out_path = base_path + "_R.txt"
671 build_config = base_path + ".build_config" 673 build_config = base_path + ".build_config"
672 674
673 build_config_target_name = "${target_name}__build_config" 675 build_config_target_name = "${target_name}__build_config"
674 process_resources_target_name = "${target_name}__process_resources" 676 process_resources_target_name = "${target_name}__process_resources"
675 final_target_name = target_name 677 final_target_name = target_name
676 678
677 write_build_config(build_config_target_name) { 679 write_build_config(build_config_target_name) {
678 type = "android_resources" 680 type = "android_resources"
679 forward_variables_from(invoker, 681 forward_variables_from(invoker,
680 [ 682 [
(...skipping 12 matching lines...) Expand all
693 possible_config_deps = invoker.deps 695 possible_config_deps = invoker.deps
694 } 696 }
695 if (defined(invoker.android_manifest_dep)) { 697 if (defined(invoker.android_manifest_dep)) {
696 deps = [ 698 deps = [
697 invoker.android_manifest_dep, 699 invoker.android_manifest_dep,
698 ] 700 ]
699 } 701 }
700 702
701 # No package means resources override their deps. 703 # No package means resources override their deps.
702 if (defined(custom_package) || defined(android_manifest)) { 704 if (defined(custom_package) || defined(android_manifest)) {
703 r_text = r_text_path 705 r_text = r_text_out_path
704 } else { 706 } else {
705 assert(defined(invoker.deps), 707 assert(defined(invoker.deps),
706 "Must specify deps when custom_package is omitted.") 708 "Must specify deps when custom_package is omitted.")
707 } 709 }
708 710
709 resources_zip = zip_path 711 resources_zip = zip_path
710 srcjar = srcjar_path 712 srcjar = srcjar_path
711 } 713 }
712 714
713 process_resources(process_resources_target_name) { 715 process_resources(process_resources_target_name) {
(...skipping 10 matching lines...) Expand all
724 "v14_skip", 726 "v14_skip",
725 ]) 727 ])
726 if (!defined(deps)) { 728 if (!defined(deps)) {
727 deps = [] 729 deps = []
728 } 730 }
729 deps += [ ":$build_config_target_name" ] 731 deps += [ ":$build_config_target_name" ]
730 if (defined(invoker.android_manifest_dep)) { 732 if (defined(invoker.android_manifest_dep)) {
731 deps += [ invoker.android_manifest_dep ] 733 deps += [ invoker.android_manifest_dep ]
732 } 734 }
733 735
736 if (defined(invoker.r_text_file)) {
737 r_text_in_path = invoker.r_text_file
738 }
739
734 # Always generate R.onResourcesLoaded() method, it is required for 740 # Always generate R.onResourcesLoaded() method, it is required for
735 # compiling ResourceRewriter, there is no side effect because the 741 # compiling ResourceRewriter, there is no side effect because the
736 # generated R.class isn't used in final apk. 742 # generated R.class isn't used in final apk.
737 shared_resources = true 743 shared_resources = true
738 if (!defined(android_manifest)) { 744 if (!defined(android_manifest)) {
739 android_manifest = "//build/android/AndroidManifest.xml" 745 android_manifest = "//build/android/AndroidManifest.xml"
740 } 746 }
741 } 747 }
742 748
743 group(final_target_name) { 749 group(final_target_name) {
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 process_resources(process_resources_target) { 1666 process_resources(process_resources_target) {
1661 forward_variables_from(invoker, 1667 forward_variables_from(invoker,
1662 [ 1668 [
1663 "alternative_android_sdk_jar", 1669 "alternative_android_sdk_jar",
1664 "android_aapt_path", 1670 "android_aapt_path",
1665 "app_as_shared_lib", 1671 "app_as_shared_lib",
1666 "include_all_resources", 1672 "include_all_resources",
1667 "shared_resources", 1673 "shared_resources",
1668 ]) 1674 ])
1669 srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 1675 srcjar_path = "${target_gen_dir}/${target_name}.srcjar"
1670 r_text_path = "${target_gen_dir}/${target_name}_R.txt" 1676 r_text_out_path = "${target_gen_dir}/${target_name}_R.txt"
1671 android_manifest = _android_manifest 1677 android_manifest = _android_manifest
1672 resource_dirs = [ "//build/android/ant/empty/res" ] 1678 resource_dirs = [ "//build/android/ant/empty/res" ]
1673 zip_path = resources_zip_path 1679 zip_path = resources_zip_path
1674 all_resources_zip_path = _all_resources_zip_path 1680 all_resources_zip_path = _all_resources_zip_path
1675 generate_constant_ids = true 1681 generate_constant_ids = true
1676 proguard_file = _generated_proguard_config 1682 proguard_file = _generated_proguard_config
1677 1683
1678 build_config = _build_config 1684 build_config = _build_config
1679 deps = _android_manifest_deps + [ ":$build_config_target" ] 1685 deps = _android_manifest_deps + [ ":$build_config_target" ]
1680 if (defined(invoker.deps)) { 1686 if (defined(invoker.deps)) {
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after
2671 rebase_path(_output_path, root_build_dir), 2677 rebase_path(_output_path, root_build_dir),
2672 "--extract", 2678 "--extract",
2673 ] 2679 ]
2674 inputs = [ 2680 inputs = [
2675 invoker.aar_path, 2681 invoker.aar_path,
2676 ] 2682 ]
2677 outputs = [ 2683 outputs = [
2678 "${_output_path}/AndroidManifest.xml", 2684 "${_output_path}/AndroidManifest.xml",
2679 ] 2685 ]
2680 2686
2687 if (_scanned_files.has_r_text_file) {
2688 # Certain packages, in particular Play Services have no R.txt even
2689 # though its presence is mandated by AAR spec. Such packages cause
2690 # spurious rebuilds if this output is specified unconditionally.
2691 outputs += [ "${_output_path}/R.txt" ]
2692 }
2693
2681 if (_scanned_files.resources != []) { 2694 if (_scanned_files.resources != []) {
2682 outputs += [ "${_output_path}/R.txt" ]
2683 outputs += get_path_info( 2695 outputs += get_path_info(
2684 rebase_path(_scanned_files.resources, "", _output_path), 2696 rebase_path(_scanned_files.resources, "", _output_path),
2685 "abspath") 2697 "abspath")
2686 } 2698 }
2687 if (_scanned_files.has_classes_jar) { 2699 if (_scanned_files.has_classes_jar) {
2688 outputs += [ "${_output_path}/classes.jar" ] 2700 outputs += [ "${_output_path}/classes.jar" ]
2689 } 2701 }
2690 outputs += 2702 outputs +=
2691 get_path_info(rebase_path(_scanned_files.subjars, "", _output_path), 2703 get_path_info(rebase_path(_scanned_files.subjars, "", _output_path),
2692 "abspath") 2704 "abspath")
2693 if (_scanned_files.has_proguard_flags) { 2705 if (_scanned_files.has_proguard_flags) {
2694 outputs += [ "${_output_path}/proguard.txt" ] 2706 outputs += [ "${_output_path}/proguard.txt" ]
2695 } 2707 }
2696 } 2708 }
2697 2709
2698 # Create the android_resources target for resources. 2710 # Create the android_resources target for resources.
2699 if (_scanned_files.resources != []) { 2711 if (_scanned_files.resources != [] || _scanned_files.has_r_text_file) {
2700 _res_target_name = "${target_name}__res" 2712 _res_target_name = "${target_name}__res"
2701 android_resources(_res_target_name) { 2713 android_resources(_res_target_name) {
2702 forward_variables_from(invoker, [ "deps" ]) 2714 forward_variables_from(invoker, [ "deps" ])
2703 if (!defined(deps)) { 2715 if (!defined(deps)) {
2704 deps = [] 2716 deps = []
2705 } 2717 }
2706 deps += [ ":$_unpack_target_name" ] 2718 deps += [ ":$_unpack_target_name" ]
2707 resource_dirs = [] 2719 resource_dirs = []
2708 generated_resource_dirs = [ "${_output_path}/res" ] 2720 generated_resource_dirs = [ "${_output_path}/res" ]
2709 generated_resource_files = 2721 generated_resource_files =
2710 rebase_path(_scanned_files.resources, "", _output_path) 2722 rebase_path(_scanned_files.resources, "", _output_path)
2711 android_manifest_dep = ":$_unpack_target_name" 2723 android_manifest_dep = ":$_unpack_target_name"
2712 android_manifest = "${_output_path}/AndroidManifest.xml" 2724 android_manifest = "${_output_path}/AndroidManifest.xml"
2725 if (_scanned_files.has_r_text_file) {
2726 r_text_file = "${_output_path}/R.txt"
2727 }
2713 v14_skip = true 2728 v14_skip = true
2714 } 2729 }
2715 } 2730 }
2716 2731
2717 # Create android_java_prebuilt target for extra jars within jars/. 2732 # Create android_java_prebuilt target for extra jars within jars/.
2718 _subjar_targets = [] 2733 _subjar_targets = []
2719 foreach(_tuple, _scanned_files.subjar_tuples) { 2734 foreach(_tuple, _scanned_files.subjar_tuples) {
2720 _current_target = "${target_name}__subjar_${_tuple[0]}" 2735 _current_target = "${target_name}__subjar_${_tuple[0]}"
2721 _subjar_targets += [ ":$_current_target" ] 2736 _subjar_targets += [ ":$_current_target" ]
2722 java_prebuilt(_current_target) { 2737 java_prebuilt(_current_target) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2782 # because in practice they seem to contain classes required to be in the 2797 # because in practice they seem to contain classes required to be in the
2783 # classpath. 2798 # classpath.
2784 deps += _subjar_targets 2799 deps += _subjar_targets
2785 } 2800 }
2786 if (defined(_res_target_name)) { 2801 if (defined(_res_target_name)) {
2787 deps += [ ":$_res_target_name" ] 2802 deps += [ ":$_res_target_name" ]
2788 } 2803 }
2789 } 2804 }
2790 } 2805 }
2791 } 2806 }
OLDNEW
« no previous file with comments | « build/config/android/internal_rules.gni ('k') | chrome/android/java/proguard.flags » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698