2019年 1月 の投稿一覧

NodeJSでflvからmp4へのエンコード handbrake-jsインストールでエラー (public key is not available)

NodeJsでFlvからエンコードするケースがあったので、ffmpegではなくhandbreakでやってみようとnpmサイトをみながらインストール

handbrake-js
Handbrake-js is Handbrake (v1.1.2) for node.js, funnily enough. It aspires to provide a lean and stable foundation for building video transcoding software in node.js.

HandBrake is a tool for converting video from nearly any format to a selection of modern, widely supported codecs. It can process most common multimedia files and any DVD or BluRay sources that do not contain any copy protection.

https://www.npmjs.com/package/handbrake-js


sudo add-apt-repository --yes ppa:stebbins/handbrake-releases
sudo apt-get update -qq
sudo apt-get install -qq handbrake-cli

The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 23E7166788B63E1E

レポジトリ追加でエラーが発生


Get:17 http://archive.ubuntu.com/ubuntu bionic-updates/main Translation-en [183 kB]
Get:18 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [714 kB]
Get:19 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [6388 B]
Fetched 1900 kB in 4s (429 kB/s)
Reading package lists... Done
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://dl.yarnpkg.com/debian stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 23E7166788B63E1E
W: Failed to fetch https://dl.yarnpkg.com/debian/dists/stable/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 23E7166788B63E1E

aptの証明書に設定


sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 23E7166788B63E1E
Executing: /tmp/apt-key-gpghome.pxI7v7yeEX/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 23E7166788B63E1E
gpg: key 1646B01B86E50310: "Yarn Packaging " 2 new signatures
gpg: key 1646B01B86E50310: "Yarn Packaging " 2 new subkeys

AdMobのリワード広告が出ない( onRewardedVideoAdLoaded Error Code = 3)

昨日まではテスト広告が表示されてたけど、今日はCode3になってしまう。

onRewardedVideoAdLoaded Code 3


     mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance( this );
     mRewardedVideoAd.setRewardedVideoAdListener( this );
     loadRewarded();
   }

    private void loadRewarded() {
        if( !mRewardedVideoAd.isLoaded() ) {
            mRewardedVideoAd.loadAd( getString( R.string.ad_reword ),
                    new AdRequest.Builder().addTestDevice( getResources().getString( R.string.test_device_id ) ).build() );
        }
    }

    @Override
        public void onRewardedVideoAdFailedToLoad( int errorCode ) {

addTestDeviceでテストデバイスを指定してるけど
試しに、下記の方法でコードをアプリIDはそのままで、リワードのコードを変更したら表示されるようになった。

リワードはaddTestDeviceだけじゃだめなのか?

テストには必ずテスト広告を使用する
アプリの開発中やテストの際は必ずテスト広告を使用し、実際の広告は使用しないでください。実際の広告を使用すると、アカウントの停止につながる可能性があります。
テスト広告を読み込むには、次に示す Android 動画リワード向けのテスト専用広告ユニット ID を使う方法が便利です。
ca-app-pub-3940256099942544/5224354917

https://developers.google.com/admob/android/rewarded-video

AdMobのバナーが表示されない(Android,Java,Admob)

AdMobが表示されない時にみてみる。


adView.setAdListener( new AdListener() {
            @Override
            public void onAdLoaded() {
            }
            @Override
            public void onAdFailedToLoad(int errorCode) {
                Log.i( "trouble-adMob-isGone", "onAdFailedToLoad errorCode => " + errorCode );
            }

エラーコードはAdRequestに定義されています。


public static final int ERROR_CODE_INTERNAL_ERROR = 0;
public static final int ERROR_CODE_INVALID_REQUEST = 1;
public static final int ERROR_CODE_NETWORK_ERROR = 2;
public static final int ERROR_CODE_NO_FILL = 3;

onAdFailedToLoad() メソッドは、パラメータが含まれる唯一のメソッドです。errorCode パラメータは、発生したエラーの種類を表します。値は AdRequest クラスで定数値として定義されます。
ERROR_CODE_INTERNAL_ERROR - 内部でエラーが発生している(広告サーバーから無効な応答を受け取った場合など)。
ERROR_CODE_INVALID_REQUEST - 広告リクエストが無効(広告ユニット ID が不適切だった場合など)。
ERROR_CODE_NETWORK_ERROR - ネットワーク接続が原因で広告をリクエストできなかった。
ERROR_CODE_NO_FILL - 広告リクエストは成功したものの、広告枠の不足が原因で広告が返されなかった。

com.mikepenz:materialdrawerをアップデートしたらAndroidXが必要になって予定外のSupport LibraryからのandroidX移行

AndroidStudioのリファクタリングからAndroidXへのマイグレーションはできますが
失敗したのか、よくわかりませんが
自分の場合はimportとXmlは手動で変えました。
ほんとはどこまで自動やってくれるんだろう。。


< android.support.v4.view.ViewPager
 xmlns:android="http://schemas.android.com/apk/res/android"

< androidx.viewpager.widget.ViewPager
 xmlns:android="http://schemas.android.com/apk/res/android"

https://developer.android.com/jetpack/androidx/migrate

Android Oでフォアグラウンドサービスがjava.lang.RuntimeException [Caused by: java.lang.SecurityExceptio at android.app.Service.startForeground]

Playコンソールでエラーを見つけた・・


java.lang.RuntimeException: 
  at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3698)
  at android.app.ActivityThread.access$1600 (ActivityThread.java:200)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1691)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6762)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
Caused by: java.lang.SecurityException: 
  at android.os.Parcel.createException (Parcel.java:1950)
  at android.os.Parcel.readException (Parcel.java:1918)
  at android.os.Parcel.readException (Parcel.java:1868)
  at android.app.IActivityManager$Stub$Proxy.setServiceForeground (IActivityManager.java:5198)
  at android.app.Service.startForeground (Service.java:695)
  at com.doroidpanic.apps.service.xxyba.a (Xxyba.java:150)
  at com.doroidpanic.apps.service.xxyba.onStartCommand (Xxyba.java:102)
  at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3679)
Caused by: android.os.RemoteException: 
  at com.android.server.am.ActivityManagerService.enforcePermission (ActivityManagerService.java:9331)
  at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked (ActiveServices.java:1193)
  at com.android.server.am.ActiveServices.setServiceForegroundLocked (ActiveServices.java:874)
  at com.android.server.am.ActivityManagerService.setServiceForeground (ActivityManagerService.java:20597)
  at android.app.IActivityManager$Stub.onTransact (IActivityManager.java:976)

ここにあった。
https://developer.android.com/about/versions/pie/android-9.0-changes-28#fg-svc

パーミッションが足りてないのか


< uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

動作の変更点: API レベル 28+ をターゲットとするアプリ
Android 9(API レベル 28)では、Android システムにさまざまな変更が加えられています。 以下の動作の変更点は、API レベル 28 以降をターゲットとするアプリのみに適用されます。 targetSdkVersion を API レベル 28 以降に設定するアプリは、必要に応じてアプリを修正してこれらの動作を適切にサポートする必要があります。
Android 9 で実行されるすべてのアプリに影響を与える変更点については、ターゲットとする API レベルに関係なく、動作の変更点: すべてのアプリをご覧ください。
フォアグラウンド サービス
Android 9 以降をターゲットにするアプリは、フォアグラウンド サービスを使用する際に FOREGROUND_SERVICE パーミッションをリクエストする必要があります。 これは Normal パーミッションなので、リクエストしたアプリに自動で付与されます。

Android 9 以降をターゲットにするアプリが FOREGROUND_SERVICE をリクエストせずに、フォアグラウンド サービスの作成を試みると、システムにより、SecurityException がスローされます。

AndroidStudioからGitHubにリモートプッシュしたら [Push rejected: Push master to origin/master was rejected by remote] [remote: error: GH007: Your push would publish a private email address.]

既存のプロジェクトをAndroidStudioからGitHubにインポートはできましたが
ローカルのcommitをリモートへPushしようとしたらエラーが発生

Push rejected: Push master to origin/master was rejected by remote


Push rejected: Push master to origin/master was rejected by remote

ネットで調べて、pull origin masterしたけどダメだったので
プロジェクトディレクトリでターミナル開いてターミナルからGitコマンドを実行したら詳細なエラーがわかりました。

GH007: Your push would publish a private email address.


$git push origin master
Enumerating objects: 38, done.
Counting objects: 100% (38/38), done.
Delta compression using up to 8 threads
Compressing objects: 100% (16/16), done.
Writing objects: 100% (20/20), 2.37 KiB | 809.00 KiB/s, done.
Total 20 (delta 11), reused 0 (delta 0)
remote: Resolving deltas: 100% (11/11), completed with 11 local objects.
remote: error: GH007: Your push would publish a private email address.
remote: You can make your email public or disable this protection by visiting:
remote: http://github.com/settings/emails
To https://github.com/doroidpanic/test.git
 ! [remote rejected] master -> master (push declined due to email privacy restrictions)
error: failed to push some refs to 'https://github.com/doroidpanic/test.git'

GitHubのエラーコードGH007でした
Githubのアカウント設定で「Keep my email address private」なのに
そのメールアドレスが設定されているので止めてくれていたようです。

Commitに残るアドレスは


git config --global user.email

で確認できます。

GitHubにログインしてのメールアドレス設定のページにアクセスすると
「Primary email address」のところに自分の匿名?”@users.noreply.github.com”のメールアドレスが記載されています。
フォントの関係で見えにくいですが、説明文の中に@users.noreply.github.comがあります。

それをGitに設定しました。


 git config --global user.email  "@users.noreply.github.com"

ローカルコミットの取り消し


git reset --soft HEAD^

ターミナルでHeadしたら、AndroidStudio側の履歴も即反映されたので
もう一度コミットして詳細をみると、メールアドレスが@users.noreply.github.comになっています。
それから再度リモートプッシュしたら成功しました。


プッシュ成功: Pushed 1 commit to origin/master

https://github.com/settings/emails