{"id":1012,"date":"2017-05-07T13:29:49","date_gmt":"2017-05-07T13:29:49","guid":{"rendered":"http:\/\/guoh.ai\/lifelog\/?p=1012"},"modified":"2018-10-25T22:57:25","modified_gmt":"2018-10-25T22:57:25","slug":"building-webrtc-for-android","status":"publish","type":"post","link":"https:\/\/guoh.ai\/lifelog\/2017\/05\/building-webrtc-for-android\/","title":{"rendered":"Building WebRTC for Android"},"content":{"rendered":"<div class=\"gfmr-markdown-container\"><div class=\"gfmr-markdown-source\" style=\"display: none;\">&lt;p&gt;ENV&lt;br \/&gt;\nUbuntu&lt;\/p&gt;\n&lt;p&gt;\u5165\u95e8\u4ee5\u53ca\u4e0b\u8f7d\u6e90\u7801&lt;br \/&gt;\n&lt;a href=&quot;https:\/\/webrtc.org\/native-code\/development\/&quot; target=&quot;_blank&quot;&gt;https:\/\/webrtc.org\/native-code\/development\/&lt;\/a&gt;&lt;br \/&gt;\n&lt;a href=&quot;https:\/\/webrtc.org\/native-code\/android\/&quot; target=&quot;_blank&quot;&gt;https:\/\/webrtc.org\/native-code\/android\/&lt;\/a&gt;&lt;\/p&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\ngclient\u00a0config\u00a0--name=src\u00a0https:\/\/chromium.googlesource.com\/external\/webrtc.git\r\necho\u00a0&quot;target_os\u00a0=\u00a0&#x5B;&#039;android&#039;]&quot;\u00a0&gt;&gt;\u00a0.gclient\r\ngclient\u00a0sync\u00a0--force\r\n&lt;\/pre&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\ngclient\u00a0runhooks\u00a0--force\r\n&lt;\/pre&gt;\n&lt;p&gt;\u67e5\u770b\u652f\u6301\u7684\u53c2\u6570\u5217\u8868&lt;\/p&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\ngn args --list out\/Debug\r\n&lt;\/pre&gt;\n&lt;p&gt;\u8bbe\u7f6e\u53c2\u6570&lt;\/p&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\ngn gen out\/Debug --args=&#039;target_os=&quot;android&quot; rtc_include_tests=false enable_nocompile_tests=true libyuv_include_tests=false&#039;\r\n&lt;\/pre&gt;\n&lt;p&gt;\u5f00\u59cb\u7f16\u8bd1&lt;\/p&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\nninja\u00a0-C\u00a0out\/Debug \u6216\u8005\u00a0ninja -C out\/Release\r\n&lt;\/pre&gt;\n&lt;p&gt;\u5185\u5b58\u4e0d\u591f\u7684\u65f6\u5019\u5c31\u7528 -j1 \u6216\u8005 -j2&lt;\/p&gt;\n&lt;p&gt;\u9700\u8981\u4f7f\u7528\u9879\u76ee\u81ea\u5e26\u7684\u4e00\u4e9b\u5de5\u5177\u7684\u65f6\u5019\u9700\u8981\u6267\u884c&lt;\/p&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\nsource\u00a0.\/build\/android\/envsetup.sh\r\n&lt;\/pre&gt;\n&lt;p&gt;\u53ef\u80fd\u51fa\u73b0\u7684\u95ee\u9898&lt;\/p&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\nguohai@ubuntu:\/home\/guohai\/WebRTC\/src$ ninja -C out\/Debug\r\nninja: Entering directory `out\/Debug&#039;\r\n&#x5B;4\/3003] ACTION \/\/base:android_runtime_jni_headers__jni_Runtime(\/\/build\/toolchain\/android:android_clang_arm)\r\nFAILED: gen\/base\/android_runtime_jni_headers\/base\/jni\/Runtime_jni.h \r\npython ..\/..\/base\/android\/jni_generator\/jni_generator.py --jar_file ..\/..\/third_party\/android_tools\/sdk\/platforms\/android-28\/android.jar --input_file java\/lang\/Runtime.class --ptr_type=long --output_dir gen\/base\/android_runtime_jni_headers\/base\/jni --includes ..\/..\/..\/..\/..\/..\/..\/base\/android\/jni_generator\/jni_generator_helper.h\r\nTraceback (most recent call last):\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 1405, in &lt;module&gt;\r\n    sys.exit(main(sys.argv))\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 1401, in main\r\n    GenerateJNIHeader(input_file, output_file, options)\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 1308, in GenerateJNIHeader\r\n    jni_from_javap = JNIFromJavaP.CreateFromClass(input_file, options)\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 773, in CreateFromClass\r\n    stderr=subprocess.PIPE)\r\n  File &quot;\/usr\/lib\/python2.7\/subprocess.py&quot;, line 710, in __init__\r\n    errread, errwrite)\r\n  File &quot;\/usr\/lib\/python2.7\/subprocess.py&quot;, line 1327, in _execute_child\r\n    raise child_exception\r\nOSError: &#x5B;Errno 2] No such file or directory\r\nJava \u73af\u5883\u53d8\u91cf\u6ca1\u6709\u8bbe\u7f6e\u597d\uff0c\u8fd9\u91cc\u9700\u8981 javap \u547d\u4ee4\r\n&lt;\/pre&gt;\n&lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt;\r\n\/home\/guohai\/WebRTC\/src\/third_party\/android_tools\/sdk\/\/build-tools\/22.0.0\/aapt:\u00a0error\u00a0while\u00a0loading\u00a0shared\u00a0libraries:\u00a0libz.so.1:\u00a0cannot\u00a0open\u00a0shared\u00a0object\u00a0file:\u00a0No\u00a0such\u00a0file\u00a0or\u00a0directory\r\nsudo\u00a0apt-get\u00a0install\u00a0lib32z1\r\n&lt;\/pre&gt;\n<\/div><div class=\"gfmr-markdown-rendered\"><p>ENV<br \/>\nUbuntu<\/p>\n<p>\u5165\u95e8\u4ee5\u53ca\u4e0b\u8f7d\u6e90\u7801<br \/>\n<a href=\"https:\/\/webrtc.org\/native-code\/development\/\" target=\"_blank\">https:\/\/webrtc.org\/native-code\/development\/<\/a><br \/>\n<a href=\"https:\/\/webrtc.org\/native-code\/android\/\" target=\"_blank\">https:\/\/webrtc.org\/native-code\/android\/<\/a><\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ngclient\u00a0config\u00a0--name=src\u00a0https:\/\/chromium.googlesource.com\/external\/webrtc.git\r\necho\u00a0&quot;target_os\u00a0=\u00a0&#x5B;'android']&quot;\u00a0&gt;&gt;\u00a0.gclient\r\ngclient\u00a0sync\u00a0--force\r\n<\/pre>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ngclient\u00a0runhooks\u00a0--force\r\n<\/pre>\n<p>\u67e5\u770b\u652f\u6301\u7684\u53c2\u6570\u5217\u8868<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ngn args --list out\/Debug\r\n<\/pre>\n<p>\u8bbe\u7f6e\u53c2\u6570<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ngn gen out\/Debug --args='target_os=&quot;android&quot; rtc_include_tests=false enable_nocompile_tests=true libyuv_include_tests=false'\r\n<\/pre>\n<p>\u5f00\u59cb\u7f16\u8bd1<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nninja\u00a0-C\u00a0out\/Debug \u6216\u8005\u00a0ninja -C out\/Release\r\n<\/pre>\n<p>\u5185\u5b58\u4e0d\u591f\u7684\u65f6\u5019\u5c31\u7528 -j1 \u6216\u8005 -j2<\/p>\n<p>\u9700\u8981\u4f7f\u7528\u9879\u76ee\u81ea\u5e26\u7684\u4e00\u4e9b\u5de5\u5177\u7684\u65f6\u5019\u9700\u8981\u6267\u884c<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsource\u00a0.\/build\/android\/envsetup.sh\r\n<\/pre>\n<p>\u53ef\u80fd\u51fa\u73b0\u7684\u95ee\u9898<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nguohai@ubuntu:\/home\/guohai\/WebRTC\/src$ ninja -C out\/Debug\r\nninja: Entering directory `out\/Debug'\r\n&#x5B;4\/3003] ACTION \/\/base:android_runtime_jni_headers__jni_Runtime(\/\/build\/toolchain\/android:android_clang_arm)\r\nFAILED: gen\/base\/android_runtime_jni_headers\/base\/jni\/Runtime_jni.h \r\npython ..\/..\/base\/android\/jni_generator\/jni_generator.py --jar_file ..\/..\/third_party\/android_tools\/sdk\/platforms\/android-28\/android.jar --input_file java\/lang\/Runtime.class --ptr_type=long --output_dir gen\/base\/android_runtime_jni_headers\/base\/jni --includes ..\/..\/..\/..\/..\/..\/..\/base\/android\/jni_generator\/jni_generator_helper.h\r\nTraceback (most recent call last):\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 1405, in &lt;module&gt;\r\n    sys.exit(main(sys.argv))\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 1401, in main\r\n    GenerateJNIHeader(input_file, output_file, options)\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 1308, in GenerateJNIHeader\r\n    jni_from_javap = JNIFromJavaP.CreateFromClass(input_file, options)\r\n  File &quot;..\/..\/base\/android\/jni_generator\/jni_generator.py&quot;, line 773, in CreateFromClass\r\n    stderr=subprocess.PIPE)\r\n  File &quot;\/usr\/lib\/python2.7\/subprocess.py&quot;, line 710, in __init__\r\n    errread, errwrite)\r\n  File &quot;\/usr\/lib\/python2.7\/subprocess.py&quot;, line 1327, in _execute_child\r\n    raise child_exception\r\nOSError: &#x5B;Errno 2] No such file or directory\r\nJava \u73af\u5883\u53d8\u91cf\u6ca1\u6709\u8bbe\u7f6e\u597d\uff0c\u8fd9\u91cc\u9700\u8981 javap \u547d\u4ee4\r\n<\/pre>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\/home\/guohai\/WebRTC\/src\/third_party\/android_tools\/sdk\/\/build-tools\/22.0.0\/aapt:\u00a0error\u00a0while\u00a0loading\u00a0shared\u00a0libraries:\u00a0libz.so.1:\u00a0cannot\u00a0open\u00a0shared\u00a0object\u00a0file:\u00a0No\u00a0such\u00a0file\u00a0or\u00a0directory\r\nsudo\u00a0apt-get\u00a0install\u00a0lib32z1\r\n<\/pre>\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>&lt;p&gt;ENV&lt;br \/&gt; Ubuntu&lt;\/p&gt; &lt;p&gt;\u5165\u95e8\u4ee5\u53ca\u4e0b\u8f7d\u6e90\u7801&lt;br \/&gt; &lt;a href=&quot;https:\/\/webrtc.org\/native-code\/development\/&quot; target=&quot;_blank&quot;&gt;https:\/\/webrtc.org\/native-code\/development\/&lt;\/a&gt;&lt;br \/&gt; &lt;a href=&quot;https:\/\/webrtc.org\/native-code\/android\/&quot; target=&quot;_blank&quot;&gt;https:\/\/webrtc.org\/native-code\/android\/&lt;\/a&gt;&lt;\/p&gt; &lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt; gclient\u00a0config\u00a0&#8211;name=src\u00a0https:\/\/chromium.googlesource.com\/external\/webrtc.git echo\u00a0&quot;target_os\u00a0=\u00a0&#x5B;&#039;android&#039;]&quot;\u00a0&gt;&gt;\u00a0.gclient gclient\u00a0sync\u00a0&#8211;force &lt;\/pre&gt; &lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt; gclient\u00a0runhooks\u00a0&#8211;force &lt;\/pre&gt; &lt;p&gt;\u67e5\u770b\u652f\u6301\u7684\u53c2\u6570\u5217\u8868&lt;\/p&gt; &lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt; gn args &#8211;list out\/Debug &lt;\/pre&gt; &lt;p&gt;\u8bbe\u7f6e\u53c2\u6570&lt;\/p&gt; &lt;pre class=&quot;brush: bash; title: ; notranslate&quot; title=&quot;&quot;&gt; gn gen &hellip; <a href=\"https:\/\/guoh.ai\/lifelog\/2017\/05\/building-webrtc-for-android\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Building WebRTC for Android<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_gfmr_meta_descriptions":[],"_gfmr_multilingual_taxonomy_terms":[],"footnotes":""},"categories":[7,34],"tags":[36],"class_list":["post-1012","post","type-post","status-publish","format-standard","hentry","category-android","category-multimedia","tag-webrtc"],"_links":{"self":[{"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/posts\/1012","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/comments?post=1012"}],"version-history":[{"count":7,"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/posts\/1012\/revisions"}],"predecessor-version":[{"id":1021,"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/posts\/1012\/revisions\/1021"}],"wp:attachment":[{"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/media?parent=1012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/categories?post=1012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/guoh.ai\/lifelog\/wp-json\/wp\/v2\/tags?post=1012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}