我需要创建一个 expo 插件文件并在 app.json 中调用它,以便在 android 清单中添加以下属性。
<uses-feature android:name="android.hardware.touchscreen"
android:required="false"/>
<uses-feature android:name="android.hardware.faketouch"
android:required="false"/>
<uses-feature android:name="android.hardware.telephony"
android:required="false"/>
<uses-feature android:name="android.hardware.camera"
android:required="false"/>
<uses-feature android:name="android.hardware.nfc"
android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"
android:required="false"/>
<uses-feature android:name="android.hardware.microphone"
android:required="false"/>
<uses-feature android:name="android.hardware.sensor"
android:required="false"/>
<intent-filter>
...
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>
我是一名使用 React Native Expo 的 javascript 开发人员,所以我没有自己创建文件的技能,我花了一整天的时间试图弄清楚这一点,但基本上没有来自 Expo 的有用文档。
我在这里找到了类似的线程:link
我按照以下步骤添加了意图过滤器
- 在您的 expo 项目中创建插件文件夹
- 创建js文件“example-file.js”
- 在文件中我添加了以下代码
const { AndroidConfig, withAndroidManifest } = require("@expo/config-plugins");
const { getMainApplicationOrThrow, addMetaDataItemToMainApplication } =
AndroidConfig.Manifest;
function addAttributesToMainActivity(androidManifest) {
const { manifest } = androidManifest;
if (!Array.isArray(manifest["application"])) {
console.warn(
"withWordlLineIntentActivity: No application array in manifest?"
);
return androidManifest;
}
const application = manifest["application"].find(
(item) => item.$["android:name"] === ".MainApplication"
);
if (!application) {
console.warn("withWordlLineIntentActivity: No .MainApplication?");
return androidManifest;
}
if (!Array.isArray(application["activity"])) {
console.warn(
"withWordlLineIntentActivity: No activity array in .MainApplication?"
);
return androidManifest;
}
const activity = application["activity"].find(
(item) => item.$["android:name"] === ".MainActivity"
);
if (!activity) {
console.warn("withWordlLineIntentActivity: No .MainActivity?");
return androidManifest;
}
const action = {};
action.$ = {
...action.$,
...{
"android:name": "com.domain.action.PROCESS_TRANSACTION",
},
};
const intent = { action: action };
activity["intent-filter"].push(intent);
return androidManifest;
}
module.exports = function withIntentActivity(config) {
return withAndroidManifest(config, (config) => {
config.modResults = addAttributesToMainActivity(config.modResults);
return config;
});
};
-
在 app.json 中添加对创建的插件的引用
“插件”:[
“./plugins/example-intent.js”
],
-
运行 expo prebuild 查看结果
我希望它能对你有一点帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)