0

この場合、パーミッション (FINE_LOCATION) のために AndroidManifest.xml を追加/変更したいので、Shoutem ファイアベース拡張 ( https://github.com/shoutem/extensions/tree/master/shoutem-ファイアベース)。

プレビュー アプリでは、これは必要ありません。そのアプリは既に場所 (およびその他) のアクセス許可を取得していますが、Play ストアに送信したり、手動でインストールしたい場合は、これをカスタム拡張機能に追加する必要があると想定しました。 Android デバイス (間違っていると思われる場合は修正してください)。

問題

Shoutem プラットフォームを使用して AndroidManifest.xml を変更するための正しい手順を実行しましたか?

結果

Shoutem CLI を使用してビルドは成功するが、builds フォルダーへのコピーで CLI がハングし、Android デバイスへのインストールが失敗する

私は次のことをしました: - /app に AndroidManifest.xml を作成しました:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.shoutemapp">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <application>
    </application>
</manifest>

app/package.json を更新し、以下を追加しました:

,
"rnpm": {
    "commands": {
        "postlink": "node node_modules/[myusername].[extensionname]/scripts/run.js"
    }
}

/scripts/run.js の内容:

require('./android/copy_custom_manifest');

/android/copy_custom_manifest の内容:

extensionPath に私の username.extensionname を使用して、firebase 拡張機能と同じ:

/* eslint-disable max-len*/
 'use_strict';

const fs = require('fs');
const MANIFEST_FILE = 'AndroidManifest.xml';

const extensionPath = './node_modules/[myusername].[extensionname]';
const manifestFilePath = `${extensionPath}/${MANIFEST_FILE}`;
const customManifestFileDestination = `android/app/src/customized/${MANIFEST_FILE}`;

const readStream = fs.createReadStream(manifestFilePath);
const writeStream = fs.createWriteStream(customManifestFileDestination, { flags: 'a' });
readStream.on('error', console.log.bind(null, `Unable to read from ${manifestFilePath}`));
writeStream.on('error', console.log.bind(null, `Unable to write to ${customManifestFileDestination}`));
writeStream.on('finish', console.log.bind(null, `copied ${manifestFilePath} to ${customManifestFileDestination}`));

fs.truncate(customManifestFileDestination, 0, (err) => {
  if (err) {
    process.exitCode = 1;
    throw new Error(`Unable to overwrite, ${manifestFilePath} does not exist`);
  }

  console.log(`Overwrite ${customManifestFileDestination} with ${manifestFilePath}`);
  readStream.pipe(writeStream);
});

ビルド プロセスでエラーは発生しませんが、次を使用してアプリが物理デバイスにインストールされません。

shoutem build-android

コンソール出力:

BUILD SUCCESSFUL
Total time: 2 mins 43.478 secs
This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.10/userguide/gradle_daemon.html
Copying .apk to /Users/matthijs/Documents/shoutem/builds
--> It stops on this last line (copying .apk), no error.
There was one error however:
[5/3/2017, 12:06:07 PM] <START> Initializing Packager
[5/3/2017, 12:06:07 PM] <START> Building in-memory fs for JavaScript
[5/3/2017, 12:06:07 PM] <END> Building in-memory fs for JavaScript (108ms)
[5/3/2017, 12:06:07 PM] <START> Building Haste Map
[5/3/2017, 12:06:07 PM] <END> Building Haste Map (304ms)
[5/3/2017, 12:06:07 PM] <END> Initializing Packager (473ms)
platform.buildPlatform(...).finally is not a function
If you think this error is caused by bug in the shoutem command, you can report the issue here: https://github.com/shoutem/cli/issues
Make sure to include the information printed using the `shoutem last-error` command
> @shoutem/mobile-app@0.56.0 build /private/var/folders/xp/strzbzt15zz4k1pvmgc99rj40000gn/T/tmp-8209NeOBTGdT1e1B
> node scripts/build "--platform" "android" "--outputDirectory" "/Users/matthijs/Documents/shoutem/builds"
Incremental java compilation is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preCustomizedReleaseBuild UP-TO-DATE
4

1 に答える 1