1
2// Set when building only part of the abis in the apk.
3def abiFiltersForWrapScript = []
4
5android {
6    buildTypes {
7        profiling {
8            initWith debug
9            externalNativeBuild {
10                cmake {
11                    // cmake Debug build type uses -O0, which makes the code slow.
12                    arguments "-DCMAKE_BUILD_TYPE=Release"
13                }
14            }
15            packagingOptions {
16
17                // Exclude wrap.sh for architectures not built.
18                if (abiFiltersForWrapScript) {
19                    def exclude_abis = ["armeabi", "armeabi-v7a", "arm64-v8a",
20                                        "x86", "x86_64", "mips", "mips64"]
21                            .findAll{ !(it in abiFiltersForWrapScript) }
22                            .collect{ "**/" + it + "/wrap.sh" }
23                    excludes += exclude_abis
24                }
25            }
26
27            // Add lib/xxx/wrap.sh in the apk. This is to enable java profiling on Android O
28            // devices.
29            sourceSets {
30                profiling {
31                    resources {
32                        srcDir {
33                            "profiling_apk_add_dir"
34                        }
35                    }
36                }
37            }
38        }
39    }
40}
41
42def writeWrapScriptToFullyCompileJavaApp(wrapFile) {
43    wrapFile.withWriter { writer ->
44        writer.write('#!/system/bin/sh\n')
45        writer.write('\$@\n')
46    }
47}
48
49task createProfilingApkAddDir {
50    for (String abi : ["armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64", "mips", "mips64"]) {
51        def dir = new File("app/profiling_apk_add_dir/lib/" + abi)
52        dir.mkdirs()
53        def wrapFile = new File(dir, "wrap.sh")
54        writeWrapScriptToFullyCompileJavaApp(wrapFile)
55        println "write file " + wrapFile.path
56    }
57}
58
59