如标题所示。使用 expo 配置插件,我已经弄清楚如何对清单、主要活动等进行更改。
现在我需要在 android 文件夹中创建一些新的活动文件(我不确定这是否可能)或者有某种方法可以解决
android 文件夹中的结构应如下所示
android
|-- app
| |-- src
| | |-- main
| | | |-- java/com/my/app
| | | | |-- [folder I want to create]
| | | | | |-- [new activity files shall goes here]
| | | | |-- MainActivity.java
| | | | |-- MainApplication.java
当然,我可以应用简单的工作流程并直接在本机文件夹内更改文件。但是我想继续使用托管工作流程。所以如果有什么办法我可以存档这个,那就太好了!
具体示例可以参见[https://github.com/wodin/rn-hce-test/blob/395c1870acb9b9fbaec8349132af92d910a4d17d/plugins/withReactNativeHce.js#L110-L116]
dangerous mod
为我们提供创建文件夹或文件的工具。
import { withDangerousMod } from '@expo/config-plugins'
const wxapiAndroid: ConfigPlugin = (config) => {
return withDangerousMod(config, [
'android',
async (config) => {
const customePackageName = 'com.johome.pro'
const srcPath = path.resolve(config.modRequest.projectRoot, config.modRequest.platformProjectRoot, `app/src/main/java/com/johome/pro`)
//create a new file
const newFileName = 'WXEntryActivity.java'
const newFolderName = 'wxapi'
const newFileContent = `
package ${customePackageName}.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class WXEntryActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
Intent intent = getIntent();
Intent intentToBroadcast = new Intent();
intentToBroadcast.setAction("com.hector.nativewechat.ACTION_REDIRECT_INTENT");
intentToBroadcast.putExtra("intent", intent);
sendBroadcast(intentToBroadcast);
finish();
} catch (Exception e) {
e.printStackTrace();
}
}
}
`
const newFilePath = path.resolve(srcPath, newFolderName, newFileName)
//create a new folder
const newFolderPath = path.resolve(srcPath, newFolderName)
if (!fs.existsSync(newFolderPath)) {
fs.mkdirSync(newFolderPath)
}
//create a new file
if (!fs.existsSync(newFilePath)) {
fs.writeFileSync(newFilePath, newFileContent)
}
//create the pay api file
const payApiFileName = 'WXPayEntryActivity.java'
const payApiFileContent = `
package ${customePackageName}.wxapi;
import android.app.Activity;
import android.os.Bundle;
public class WXPayEntryActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
}
`
const payApiFilePath = path.resolve(srcPath, newFolderName, payApiFileName)
if (!fs.existsSync(payApiFilePath)) {
fs.writeFileSync(payApiFilePath, payApiFileContent)
}
return config
},
])
}
export default wxapiAndroid