diff options
8 files changed, 74 insertions, 3 deletions
diff --git a/doc/reference/modules/android-sdk-module.qdoc b/doc/reference/modules/android-sdk-module.qdoc index 98565f8b8..40d80b021 100644 --- a/doc/reference/modules/android-sdk-module.qdoc +++ b/doc/reference/modules/android-sdk-module.qdoc @@ -187,3 +187,8 @@ \defaultvalue \l packageName */ + +/*! + \qmlproperty stringList Android.sdk::aidlSearchPaths + Search paths for import statements to pass to the \c aidl tool via the \c{-I} option. +*/ diff --git a/share/qbs/modules/Android/sdk/sdk.qbs b/share/qbs/modules/Android/sdk/sdk.qbs index cb26b2ee0..d5bd29477 100644 --- a/share/qbs/modules/Android/sdk/sdk.qbs +++ b/share/qbs/modules/Android/sdk/sdk.qbs @@ -135,6 +135,8 @@ Module { property path zipalignFilePath: FileInfo.joinPaths(buildToolsDir, "zipalign") property path androidJarFilePath: FileInfo.joinPaths(sdkDir, "platforms", platform, "android.jar") + property path frameworkAidlFilePath: FileInfo.joinPaths(sdkDir, "platforms", platform, + "framework.aidl") property path generatedJavaFilesBaseDir: FileInfo.joinPaths(product.buildDirectory, "gen") property path generatedJavaFilesDir: FileInfo.joinPaths(generatedJavaFilesBaseDir, (packageName || "").split('.').join('/')) @@ -145,6 +147,7 @@ Module { ".android", "debug.keystore") property bool useApksigner: buildToolsVersion && Utilities.versionCompare( buildToolsVersion, "24.0.3") >= 0 + property stringList aidlSearchPaths Depends { name: "java" } java.languageVersion: platformJavaVersion @@ -216,8 +219,13 @@ Module { } prepare: { - var aidl = ModUtils.moduleProperty(product, "aidlFilePath"); - cmd = new Command(aidl, [input.filePath, output.filePath]); + var aidl = product.Android.sdk.aidlFilePath; + var args = ["-p" + product.Android.sdk.frameworkAidlFilePath]; + var aidlSearchPaths = input.Android.sdk.aidlSearchPaths; + for (var i = 0; i < (aidlSearchPaths ? aidlSearchPaths.length : 0); ++i) + args.push("-I" + aidlSearchPaths[i]); + args.push(input.filePath, output.filePath); + cmd = new Command(aidl, args); cmd.description = "Processing " + input.fileName; return [cmd]; } diff --git a/tests/auto/blackbox/testdata-android/aidl/AndroidManifest.xml b/tests/auto/blackbox/testdata-android/aidl/AndroidManifest.xml new file mode 100644 index 000000000..e8a950847 --- /dev/null +++ b/tests/auto/blackbox/testdata-android/aidl/AndroidManifest.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="io.qbs.aidltest"> + <application android:label="AidlTest"> + <activity android:name="MainActivity"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> +</manifest> diff --git a/tests/auto/blackbox/testdata-android/aidl/aidl.qbs b/tests/auto/blackbox/testdata-android/aidl/aidl.qbs new file mode 100644 index 000000000..6e827099f --- /dev/null +++ b/tests/auto/blackbox/testdata-android/aidl/aidl.qbs @@ -0,0 +1,8 @@ +Application { + name: "io.qbs.aidltest" + Android.sdk.aidlSearchPaths: path + files: [ + "AndroidManifest.xml", + "io/qbs/aidltest/*", + ] +} diff --git a/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/Interface1.aidl b/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/Interface1.aidl new file mode 100644 index 000000000..34fb0386c --- /dev/null +++ b/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/Interface1.aidl @@ -0,0 +1,7 @@ +package io.qbs.aidltest; + +import io.qbs.aidltest.Interface2; + +interface Interface1 { + void doSomething(in Interface2 param1, in Bundle param2); +} diff --git a/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/Interface2.aidl b/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/Interface2.aidl new file mode 100644 index 000000000..815d44f23 --- /dev/null +++ b/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/Interface2.aidl @@ -0,0 +1,5 @@ +package io.qbs.aidltest; + +interface Interface2 { + void someFunc(in Bundle params); +} diff --git a/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/MainActivity.java b/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/MainActivity.java new file mode 100644 index 000000000..e38cfa55b --- /dev/null +++ b/tests/auto/blackbox/testdata-android/aidl/io/qbs/aidltest/MainActivity.java @@ -0,0 +1,18 @@ +package io.qbs.aidltest; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.TextView; + +public class MainActivity extends Activity +{ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + TextView label = new TextView(this); + label.setText("Hello world!"); + + setContentView(label); + } +} diff --git a/tests/auto/blackbox/tst_blackboxandroid.cpp b/tests/auto/blackbox/tst_blackboxandroid.cpp index 705bc6b7e..b4c431902 100644 --- a/tests/auto/blackbox/tst_blackboxandroid.cpp +++ b/tests/auto/blackbox/tst_blackboxandroid.cpp @@ -197,7 +197,7 @@ void TestBlackboxAndroid::android_data() const QByteArrayList commonFiles = expandArchs(archs, { "AndroidManifest.xml", "META-INF/ANDROIDD.RSA", "META-INF/ANDROIDD.SF", - "META-INF/MANIFEST.MF", "classes.dex", "resources.arsc" + "META-INF/MANIFEST.MF", "classes.dex" }); QTest::addColumn<QString>("projectDir"); @@ -206,6 +206,7 @@ void TestBlackboxAndroid::android_data() QTest::newRow("teapot") << "teapot" << QStringList("TeapotNativeActivity") << (QList<QByteArrayList>() << commonFiles + expandArchs(archs, { + "resources.arsc", "assets/Shaders/ShaderPlain.fsh", "assets/Shaders/VS_ShaderPlain.vsh", "lib/${ARCH}/gdbserver", @@ -216,6 +217,7 @@ void TestBlackboxAndroid::android_data() << "no-native" << QStringList("com.example.android.basicmediadecoder") << (QList<QByteArrayList>() << commonFiles + expandArchs(archs, { + "resources.arsc", "res/drawable-hdpi-v4/ic_action_play_disabled.png", "res/drawable-hdpi-v4/ic_action_play.png", "res/drawable-hdpi-v4/ic_launcher.png", @@ -232,24 +234,30 @@ void TestBlackboxAndroid::android_data() "res/menu/action_menu.xml", "res/menu-v11/action_menu.xml", "res/raw/vid_bigbuckbunny.mp4"})); + QTest::newRow("aidl") << "aidl" << QStringList("io.qbs.aidltest") + << QList<QByteArrayList>{commonFiles}; QTest::newRow("multiple libs") << "multiple-libs-per-apk" << QStringList("twolibs") << (QList<QByteArrayList>() << commonFiles + expandArchs(archs, { + "resources.arsc", "lib/${ARCH}/gdbserver", "lib/${ARCH}/liblib1.so", "lib/${ARCH}/liblib2.so", "lib/${ARCH}/libstlport_shared.so"})); QByteArrayList expectedFiles1 = (commonFiles + expandArchs(QByteArrayList{"mips", "x86"}, { + "resources.arsc", "lib/${ARCH}/gdbserver", "lib/${ARCH}/libp1lib1.so", "lib/${ARCH}/libstlport_shared.so"}) + expandArchs(QByteArrayList{archs}, { + "resources.arsc", "lib/${ARCH}/gdbserver", "lib/${ARCH}/libp1lib2.so", "lib/${ARCH}/libstlport_shared.so"})).toSet().toList(); QByteArrayList expectedFiles2 = commonFiles + expandArchs(archs, { + "resources.arsc", "lib/${ARCH}/gdbserver", "lib/${ARCH}/libp2lib1.so", "lib/${ARCH}/libp2lib2.so", |