You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1789 lines
86 KiB
1789 lines
86 KiB
<!DOCTYPE html>
|
|
<!-- saved from url=(0038)https://www.jianshu.com/p/bce912c7b376 -->
|
|
<html><!--<![endif]--><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">
|
|
|
|
<!-- Start of Baidu Transcode -->
|
|
<meta http-equiv="Cache-Control" content="no-siteapp">
|
|
<meta http-equiv="Cache-Control" content="no-transform">
|
|
<meta name="applicable-device" content="pc,mobile">
|
|
<meta name="MobileOptimized" content="width">
|
|
<meta name="HandheldFriendly" content="true">
|
|
<meta name="mobile-agent" content="format=html5;url=https://www.jianshu.com/p/bce912c7b376">
|
|
<!-- End of Baidu Transcode -->
|
|
|
|
<meta name="description" content="前言 学习了上一篇Android FFmpeg JNI开发入门_01,就算FFmpeg的JNI开发已经算入门了,但是上一篇中只编译了armeabi的so库,这一篇中将编译出其他类型的CPU架构的so库。由于本人也是新手,所以方法可能比较笨。 0. ABI和CPU的关系 主流的ABI架构 armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年以后的生产的大部分Android设备...">
|
|
|
|
<meta name="360-site-verification" content="604a14b53c6b871206001285921e81d8">
|
|
<meta property="wb:webmaster" content="294ec9de89e7fadb">
|
|
<meta property="qc:admins" content="104102651453316562112116375">
|
|
<meta property="qc:admins" content="11635613706305617">
|
|
<meta property="qc:admins" content="1163561616621163056375">
|
|
<meta name="google-site-verification" content="cV4-qkUJZR6gmFeajx_UyPe47GW9vY6cnCrYtCHYNh4">
|
|
<meta name="google-site-verification" content="HF7lfF8YEGs1qtCE-kPml8Z469e2RHhGajy6JPVy5XI">
|
|
<meta http-equiv="mobile-agent" content="format=html5; url=https://www.jianshu.com/p/bce912c7b376">
|
|
|
|
<!-- Apple -->
|
|
<meta name="apple-mobile-web-app-title" content="简书">
|
|
|
|
<!-- Meta for Smart App Banner -->
|
|
<meta name="apple-itunes-app" content="app-id=888237539, app-argument=jianshu://notes/36645754">
|
|
<!-- End -->
|
|
|
|
<!-- Meta for Twitter Card -->
|
|
<meta content="summary" property="twitter:card">
|
|
<meta content="@jianshucom" property="twitter:site">
|
|
<meta content="Android FFmpeg JNI开发入门_编译不同ABI的so库" property="twitter:title">
|
|
<meta content="前言 学习了上一篇Android FFmpeg JNI开发入门_01,就算FFmpeg的JNI开发已经算入门了,但是上一篇中只编译了armeabi的so库,这一篇中将编译出其..." property="twitter:description">
|
|
<meta content="https://www.jianshu.com/p/bce912c7b376" property="twitter:url">
|
|
<!-- End -->
|
|
|
|
<!-- Meta for OpenGraph -->
|
|
<meta property="fb:app_id" content="865829053512461">
|
|
<meta property="og:site_name" content="简书">
|
|
<meta property="og:title" content="Android FFmpeg JNI开发入门_编译不同ABI的so库">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:url" content="https://www.jianshu.com/p/bce912c7b376">
|
|
<meta property="og:description" content="前言 学习了上一篇Android FFmpeg JNI开发入门_01,就算FFmpeg的JNI开发已经算入门了,但是上一篇中只编译了armeabi的so库,这一篇中将编译出其他类型的CPU架构的...">
|
|
<!-- End -->
|
|
|
|
<!-- Meta for Facebook Applinks -->
|
|
<meta property="al:ios:url" content="jianshu://notes/36645754">
|
|
<meta property="al:ios:app_store_id" content="888237539">
|
|
<meta property="al:ios:app_name" content="简书">
|
|
|
|
<meta property="al:android:url" content="jianshu://notes/36645754">
|
|
<meta property="al:android:package" content="com.jianshu.haruki">
|
|
<meta property="al:android:app_name" content="简书">
|
|
<!-- End -->
|
|
|
|
|
|
<title>Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书</title>
|
|
|
|
<meta name="csrf-param" content="authenticity_token">
|
|
<meta name="csrf-token" content="C/3T29d+aFZN5zWvNU3XGdT0Zp5N27bLIJmYOAwFwchG74hlSMscmVUQEWdBcDFKTolCJnHKmiVj53/hjLOkOQ==">
|
|
|
|
<link rel="stylesheet" media="all" href="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/web-274d6a76417c1f7a7da5.css">
|
|
|
|
<link rel="stylesheet" media="all" href="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/entry-aa75deb505b1b600256a.css">
|
|
|
|
<link href="https://cdn2.jianshu.io/assets/favicons/favicon-e743bfb1821442341c3ab15bdbe804f7ad97676bd07a770ccc9483473aa76f06.ico" rel="shortcut icon" type="image/x-icon">
|
|
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/57-a6f1f1ee62ace44f6dc2f6a08575abd3c3b163288881c78dd8d75247682a4b27.png" sizes="57x57">
|
|
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/72-fb9834bcfce738fd7b9c5e31363e79443e09a81a8e931170b58bc815387c1562.png" sizes="72x72">
|
|
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/76-49d88e539ff2489475d603994988d871219141ecaa0b1a7a9a1914f4fe3182d6.png" sizes="76x76">
|
|
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/114-24252fe693524ed3a9d0905e49bff3cbd0228f25a320aa09053c2ebb4955de97.png" sizes="114x114">
|
|
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/120-1bb7371f5e87f93ce780a5f1a05ff1b176828ee0d1d130e768575918a2e05834.png" sizes="120x120">
|
|
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/152-bf209460fc1c17bfd3e2b84c8e758bc11ca3e570fd411c3bbd84149b97453b99.png" sizes="152x152">
|
|
|
|
<!-- Start of 访问统计 -->
|
|
<script src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/push.js.下载"></script><script src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/hm.js.下载"></script><script>
|
|
var _hmt = _hmt || [];
|
|
(function() {
|
|
var hm = document.createElement("script");
|
|
hm.src = "//hm.baidu.com/hm.js?0c0e9d9b1e7d617b3e6842e85b9fb068";
|
|
var s = document.getElementsByTagName("script")[0];
|
|
s.parentNode.insertBefore(hm, s);
|
|
})();
|
|
</script>
|
|
|
|
<!-- End of 访问统计 -->
|
|
<style type="text/css">@charset "UTF-8";.image-package .image-container{position:relative;z-index:2;background-color:#eee;-webkit-transition:background-color .1s linear;-o-transition:background-color .1s linear;transition:background-color .1s linear;margin:0 auto}body.reader-night-mode .image-package .image-container{background-color:#545454}.image-package .image-container-fill{z-index:1}.image-package .image-container .image-view{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.image-package .image-container .image-view-error:after{content:"图片获取失败,请点击重试";position:absolute;top:50%;left:50%;width:100%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#888;font-size:14px}.image-package .image-container .image-view img.image-loading{opacity:.3}.image-package .image-container .image-view img{-webkit-transition:all .15s linear;-o-transition:all .15s linear;transition:all .15s linear;z-index:2;opacity:1}</style><style type="text/css">fieldset[disabled] .multiselect {
|
|
pointer-events: none;
|
|
}
|
|
|
|
.multiselect__spinner {
|
|
position: absolute;
|
|
right: 1px;
|
|
top: 1px;
|
|
width: 48px;
|
|
height: 35px;
|
|
background: #fff;
|
|
display: block;
|
|
}
|
|
|
|
.multiselect__spinner:after,
|
|
.multiselect__spinner:before {
|
|
position: absolute;
|
|
content: "";
|
|
top: 50%;
|
|
left: 50%;
|
|
margin: -8px 0 0 -8px;
|
|
width: 16px;
|
|
height: 16px;
|
|
border-radius: 100%;
|
|
border-color: #41b883 transparent transparent;
|
|
border-style: solid;
|
|
border-width: 2px;
|
|
box-shadow: 0 0 0 1px transparent;
|
|
}
|
|
|
|
.multiselect__spinner:before {
|
|
animation: a 2.4s cubic-bezier(.41,.26,.2,.62);
|
|
animation-iteration-count: infinite;
|
|
}
|
|
|
|
.multiselect__spinner:after {
|
|
animation: a 2.4s cubic-bezier(.51,.09,.21,.8);
|
|
animation-iteration-count: infinite;
|
|
}
|
|
|
|
.multiselect__loading-enter-active,
|
|
.multiselect__loading-leave-active {
|
|
transition: opacity .4s ease-in-out;
|
|
opacity: 1;
|
|
}
|
|
|
|
.multiselect__loading-enter,
|
|
.multiselect__loading-leave-active {
|
|
opacity: 0;
|
|
}
|
|
|
|
.multiselect,
|
|
.multiselect__input,
|
|
.multiselect__single {
|
|
font-family: inherit;
|
|
font-size: 14px;
|
|
-ms-touch-action: manipulation;
|
|
touch-action: manipulation;
|
|
}
|
|
|
|
.multiselect {
|
|
box-sizing: content-box;
|
|
display: block;
|
|
position: relative;
|
|
width: 100%;
|
|
min-height: 40px;
|
|
text-align: left;
|
|
color: #35495e;
|
|
}
|
|
|
|
.multiselect * {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.multiselect:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.multiselect--disabled {
|
|
opacity: .6;
|
|
}
|
|
|
|
.multiselect--active {
|
|
z-index: 1;
|
|
}
|
|
|
|
.multiselect--active:not(.multiselect--above) .multiselect__current,
|
|
.multiselect--active:not(.multiselect--above) .multiselect__input,
|
|
.multiselect--active:not(.multiselect--above) .multiselect__tags {
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
}
|
|
|
|
.multiselect--active .multiselect__select {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
.multiselect--above.multiselect--active .multiselect__current,
|
|
.multiselect--above.multiselect--active .multiselect__input,
|
|
.multiselect--above.multiselect--active .multiselect__tags {
|
|
border-top-left-radius: 0;
|
|
border-top-right-radius: 0;
|
|
}
|
|
|
|
.multiselect__input,
|
|
.multiselect__single {
|
|
position: relative;
|
|
display: inline-block;
|
|
min-height: 20px;
|
|
line-height: 20px;
|
|
border: none;
|
|
border-radius: 5px;
|
|
background: #fff;
|
|
padding: 0 0 0 5px;
|
|
width: 100%;
|
|
transition: border .1s ease;
|
|
box-sizing: border-box;
|
|
margin-bottom: 8px;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.multiselect__tag~.multiselect__input,
|
|
.multiselect__tag~.multiselect__single {
|
|
width: auto;
|
|
}
|
|
|
|
.multiselect__input:hover,
|
|
.multiselect__single:hover {
|
|
border-color: #cfcfcf;
|
|
}
|
|
|
|
.multiselect__input:focus,
|
|
.multiselect__single:focus {
|
|
border-color: #a8a8a8;
|
|
outline: none;
|
|
}
|
|
|
|
.multiselect__single {
|
|
padding-left: 6px;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.multiselect__tags-wrap {
|
|
display: inline;
|
|
}
|
|
|
|
.multiselect__tags {
|
|
min-height: 40px;
|
|
display: block;
|
|
padding: 8px 40px 0 8px;
|
|
border-radius: 5px;
|
|
border: 1px solid #e8e8e8;
|
|
background: #fff;
|
|
}
|
|
|
|
.multiselect__tag {
|
|
position: relative;
|
|
display: inline-block;
|
|
padding: 4px 26px 4px 10px;
|
|
border-radius: 5px;
|
|
margin-right: 10px;
|
|
color: #fff;
|
|
line-height: 1;
|
|
background: #41b883;
|
|
margin-bottom: 5px;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
max-width: 100%;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.multiselect__tag-icon {
|
|
cursor: pointer;
|
|
margin-left: 7px;
|
|
position: absolute;
|
|
right: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
font-weight: 700;
|
|
font-style: normal;
|
|
width: 22px;
|
|
text-align: center;
|
|
line-height: 22px;
|
|
transition: all .2s ease;
|
|
border-radius: 5px;
|
|
}
|
|
|
|
.multiselect__tag-icon:after {
|
|
content: "\D7";
|
|
color: #266d4d;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.multiselect__tag-icon:focus,
|
|
.multiselect__tag-icon:hover {
|
|
background: #369a6e;
|
|
}
|
|
|
|
.multiselect__tag-icon:focus:after,
|
|
.multiselect__tag-icon:hover:after {
|
|
color: #fff;
|
|
}
|
|
|
|
.multiselect__current {
|
|
min-height: 40px;
|
|
overflow: hidden;
|
|
padding: 8px 12px 0;
|
|
padding-right: 30px;
|
|
white-space: nowrap;
|
|
border-radius: 5px;
|
|
border: 1px solid #e8e8e8;
|
|
}
|
|
|
|
.multiselect__current,
|
|
.multiselect__select {
|
|
line-height: 16px;
|
|
box-sizing: border-box;
|
|
display: block;
|
|
margin: 0;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.multiselect__select {
|
|
position: absolute;
|
|
width: 40px;
|
|
height: 38px;
|
|
right: 1px;
|
|
top: 1px;
|
|
padding: 4px 8px;
|
|
text-align: center;
|
|
transition: transform .2s ease;
|
|
}
|
|
|
|
.multiselect__select:before {
|
|
position: relative;
|
|
right: 0;
|
|
top: 65%;
|
|
color: #999;
|
|
margin-top: 4px;
|
|
border-style: solid;
|
|
border-width: 5px 5px 0;
|
|
border-color: #999 transparent transparent;
|
|
content: "";
|
|
}
|
|
|
|
.multiselect__placeholder {
|
|
color: #adadad;
|
|
display: inline-block;
|
|
margin-bottom: 10px;
|
|
padding-top: 2px;
|
|
}
|
|
|
|
.multiselect--active .multiselect__placeholder {
|
|
display: none;
|
|
}
|
|
|
|
.multiselect__content-wrapper {
|
|
position: absolute;
|
|
display: block;
|
|
background: #fff;
|
|
width: 100%;
|
|
max-height: 240px;
|
|
overflow: auto;
|
|
border: 1px solid #e8e8e8;
|
|
border-top: none;
|
|
border-bottom-left-radius: 5px;
|
|
border-bottom-right-radius: 5px;
|
|
z-index: 1;
|
|
-webkit-overflow-scrolling: touch;
|
|
}
|
|
|
|
.multiselect__content {
|
|
list-style: none;
|
|
display: inline-block;
|
|
padding: 0;
|
|
margin: 0;
|
|
min-width: 100%;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.multiselect--above .multiselect__content-wrapper {
|
|
bottom: 100%;
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
border-top-left-radius: 5px;
|
|
border-top-right-radius: 5px;
|
|
border-bottom: none;
|
|
border-top: 1px solid #e8e8e8;
|
|
}
|
|
|
|
.multiselect__content::webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
.multiselect__element {
|
|
display: block;
|
|
}
|
|
|
|
.multiselect__option {
|
|
display: block;
|
|
padding: 12px;
|
|
min-height: 40px;
|
|
line-height: 16px;
|
|
text-decoration: none;
|
|
text-transform: none;
|
|
vertical-align: middle;
|
|
position: relative;
|
|
cursor: pointer;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.multiselect__option:after {
|
|
top: 0;
|
|
right: 0;
|
|
position: absolute;
|
|
line-height: 40px;
|
|
padding-right: 12px;
|
|
padding-left: 20px;
|
|
}
|
|
|
|
.multiselect__option--highlight {
|
|
background: #41b883;
|
|
outline: none;
|
|
color: #fff;
|
|
}
|
|
|
|
.multiselect__option--highlight:after {
|
|
content: attr(data-select);
|
|
background: #41b883;
|
|
color: #fff;
|
|
}
|
|
|
|
.multiselect__option--selected {
|
|
background: #f3f3f3;
|
|
color: #35495e;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.multiselect__option--selected:after {
|
|
content: attr(data-selected);
|
|
color: silver;
|
|
}
|
|
|
|
.multiselect__option--selected.multiselect__option--highlight {
|
|
background: #ff6a6a;
|
|
color: #fff;
|
|
}
|
|
|
|
.multiselect__option--selected.multiselect__option--highlight:after {
|
|
background: #ff6a6a;
|
|
content: attr(data-deselect);
|
|
color: #fff;
|
|
}
|
|
|
|
.multiselect--disabled {
|
|
background: #ededed;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.multiselect--disabled .multiselect__current,
|
|
.multiselect--disabled .multiselect__select,
|
|
.multiselect__option--disabled {
|
|
background: #ededed;
|
|
color: #a6a6a6;
|
|
}
|
|
|
|
.multiselect__option--disabled {
|
|
cursor: text;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.multiselect__option--disabled.multiselect__option--highlight {
|
|
background: #dedede!important;
|
|
}
|
|
|
|
.multiselect-enter-active,
|
|
.multiselect-leave-active {
|
|
transition: all .15s ease;
|
|
}
|
|
|
|
.multiselect-enter,
|
|
.multiselect-leave-active {
|
|
opacity: 0;
|
|
}
|
|
|
|
.multiselect__strong {
|
|
margin-bottom: 8px;
|
|
line-height: 20px;
|
|
display: inline-block;
|
|
vertical-align: top;
|
|
}
|
|
|
|
[dir=rtl] .multiselect {
|
|
text-align: right;
|
|
}
|
|
|
|
[dir=rtl] .multiselect__select {
|
|
right: auto;
|
|
left: 1px;
|
|
}
|
|
|
|
[dir=rtl] .multiselect__tags {
|
|
padding: 8px 8px 0 40px;
|
|
}
|
|
|
|
[dir=rtl] .multiselect__content {
|
|
text-align: right;
|
|
}
|
|
|
|
[dir=rtl] .multiselect__option:after {
|
|
right: auto;
|
|
left: 0;
|
|
}
|
|
|
|
[dir=rtl] .multiselect__clear {
|
|
right: auto;
|
|
left: 12px;
|
|
}
|
|
|
|
[dir=rtl] .multiselect__spinner {
|
|
right: auto;
|
|
left: 1px;
|
|
}
|
|
|
|
@keyframes a {
|
|
0% {
|
|
transform: rotate(0);
|
|
}
|
|
|
|
to {
|
|
transform: rotate(2turn);
|
|
}
|
|
}</style><style type="text/css">
|
|
#free-reward-panel .reward-users-modal main {
|
|
padding: 0;
|
|
}
|
|
</style><style type="text/css">
|
|
@charset "UTF-8";
|
|
/*
|
|
* 变量
|
|
*/
|
|
.reward-note-modal .v-modal {
|
|
width: 620px;
|
|
text-align: center;
|
|
}
|
|
.reward-note-modal .v-modal form {
|
|
margin: 0 auto 25px auto;
|
|
padding: 0 40px;
|
|
}
|
|
.reward-note-modal .v-modal .reward-intro {
|
|
margin-top: 20px;
|
|
margin-bottom: 20px;
|
|
font-size: 16px;
|
|
}
|
|
.reward-note-modal .v-modal .reward-intro .avatar {
|
|
cursor: default !important;
|
|
width: 36px;
|
|
height: 36px;
|
|
margin-right: 10px;
|
|
display: inline-block;
|
|
}
|
|
.reward-note-modal .v-modal .reward-intro .intro {
|
|
margin-right: 5px;
|
|
font-weight: bold;
|
|
vertical-align: middle;
|
|
}
|
|
.reward-note-modal .v-modal .reward-intro i {
|
|
color: #EA6F5A;
|
|
vertical-align: middle;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs {
|
|
margin: 25px 0;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group {
|
|
margin: 0 -5px;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group input {
|
|
display: none;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group input:checked + .option {
|
|
color: #EA6F5A;
|
|
border-color: #EA6F5A;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .custom-amount:checked + .option .custom-text {
|
|
opacity: 0;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .custom-amount:checked + .option .custom-amount-input {
|
|
opacity: 1;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option {
|
|
position: relative;
|
|
margin: 0 5px 15px;
|
|
width: 156px;
|
|
height: 56px;
|
|
line-height: 54px;
|
|
border: 1px solid #E6E6E6;
|
|
border-radius: 4px;
|
|
font-weight: normal;
|
|
color: #999999;
|
|
cursor: pointer;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option i {
|
|
font-size: 16px;
|
|
vertical-align: middle;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option .amount {
|
|
font-size: 28px;
|
|
vertical-align: middle;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option .piece {
|
|
font-size: 13px;
|
|
vertical-align: sub;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input {
|
|
position: absolute;
|
|
top: 0;
|
|
z-index: -1;
|
|
width: 100%;
|
|
opacity: 0;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input i {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 10px;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input .piece {
|
|
position: absolute;
|
|
top: 4px;
|
|
right: 10px;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input input {
|
|
display: block;
|
|
margin: 0 auto;
|
|
width: 80px;
|
|
height: 54px;
|
|
line-height: 54px;
|
|
border: none;
|
|
font-size: 28px;
|
|
text-align: center;
|
|
background: transparent;
|
|
-moz-appearance: textfield;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input input::-webkit-outer-spin-button, .reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input input::-webkit-inner-spin-button {
|
|
-webkit-appearance: none !important;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .message {
|
|
padding: 15px 20px;
|
|
margin-bottom: 0;
|
|
font-size: 14px;
|
|
border: 1px solid #E6E6E6;
|
|
color: #333333;
|
|
border-radius: 4px;
|
|
background-color: rgba(180, 180, 180, 0.1);
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .message textarea {
|
|
width: 100%;
|
|
height: 44px;
|
|
padding: 0;
|
|
margin: 0;
|
|
resize: none;
|
|
background: none !important;
|
|
border: none !important;
|
|
-webkit-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
-webkit-box-shadow: none;
|
|
box-shadow: none;
|
|
}
|
|
.reward-note-modal .v-modal .main-inputs .message textarea:focus {
|
|
outline: none;
|
|
}
|
|
.reward-note-modal .v-modal .reward-info .amount {
|
|
font-size: 28px;
|
|
font-weight: bold;
|
|
color: #EA6F5A;
|
|
}
|
|
.reward-note-modal .v-modal .reward-info .pay-method {
|
|
font-size: 14px;
|
|
}
|
|
.reward-note-modal .v-modal .reward-info .pay-method a {
|
|
color: #3194D0;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay {
|
|
margin: 0 -5px;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay input {
|
|
display: none;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay input:checked + .option {
|
|
color: #EA6F5A;
|
|
border-color: #EA6F5A;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay .option {
|
|
margin: 20px 5px 10px;
|
|
width: 156px;
|
|
height: 56px;
|
|
line-height: 54px;
|
|
text-align: center;
|
|
border: 1px solid #E6E6E6;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay .option img {
|
|
height: 30px;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay .option img.day.alipay, .reward-note-modal .v-modal .choose-pay .option img.night.alipay {
|
|
min-width: 85px;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay .option img.day.wechat, .reward-note-modal .v-modal .choose-pay .option img.night.wechat {
|
|
min-width: 112px;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay .option img.night {
|
|
display: none;
|
|
}
|
|
body.reader-night-mode .reward-note-modal .v-modal .choose-pay .option img.night {
|
|
display: inline-block;
|
|
}
|
|
body.reader-night-mode .reward-note-modal .v-modal .choose-pay .option img.day {
|
|
display: none;
|
|
}
|
|
.reward-note-modal .v-modal .choose-pay .tooltip {
|
|
width: 230px;
|
|
}
|
|
.reward-note-modal .v-modal .modal-footer {
|
|
padding: 0 15px 20px;
|
|
border: none;
|
|
background-color: transparent;
|
|
text-align: center;
|
|
}
|
|
.reward-note-modal .v-modal .modal-footer .btn {
|
|
padding: 8px 45px;
|
|
font-size: 24px;
|
|
}
|
|
.reward-note-modal .v-modal .btn-pay {
|
|
padding: 8px 25px;
|
|
font-size: 16px;
|
|
color: #ffffff;
|
|
background-color: #F5A623;
|
|
}
|
|
.weixin-pay, .success-pay {
|
|
text-align: center;
|
|
}
|
|
.weixin-pay .v-modal, .success-pay .v-modal {
|
|
width: 350px;
|
|
}
|
|
.weixin-pay .ic-successed, .success-pay .ic-successed {
|
|
font-size: 60px;
|
|
color: #3db922;
|
|
}
|
|
.weixin-pay h2, .weixin-pay h3, .success-pay h2, .success-pay h3 {
|
|
margin-bottom: 20px;
|
|
color: #333333;
|
|
}
|
|
.weixin-pay h2, .success-pay h2 {
|
|
margin: 0 0 40px 0;
|
|
font-size: 24px;
|
|
}
|
|
.weixin-pay .bind-text, .success-pay .bind-text {
|
|
position: relative;
|
|
margin-bottom: 30px;
|
|
font-size: 14px;
|
|
color: #999999;
|
|
}
|
|
.weixin-pay .bind-text:before, .weixin-pay .bind-text:after, .success-pay .bind-text:before, .success-pay .bind-text:after {
|
|
content: "";
|
|
border-top: 1px solid #999;
|
|
display: block;
|
|
position: absolute;
|
|
width: 40px;
|
|
top: 8px;
|
|
}
|
|
.weixin-pay .bind-text:before, .success-pay .bind-text:before {
|
|
left: 30px;
|
|
}
|
|
.weixin-pay .bind-text:after, .success-pay .bind-text:after {
|
|
right: 30px;
|
|
}
|
|
.weixin-pay .share-bind, .success-pay .share-bind {
|
|
display: block;
|
|
margin-bottom: 30px;
|
|
}
|
|
.weixin-pay .share-bind i, .success-pay .share-bind i {
|
|
margin-right: 4px;
|
|
font-size: 22px;
|
|
vertical-align: middle;
|
|
}
|
|
.weixin-pay .share-bind.wechat i, .success-pay .share-bind.wechat i {
|
|
color: #00BB29;
|
|
}
|
|
.weixin-pay .share-bind.weibo i, .success-pay .share-bind.weibo i {
|
|
color: #E05244;
|
|
}
|
|
.weixin-pay .wx-qr-code, .success-pay .wx-qr-code {
|
|
display: inline-block;
|
|
}
|
|
.weixin-pay .wx-qr-code img, .success-pay .wx-qr-code img {
|
|
margin: 0 auto;
|
|
padding: 10px;
|
|
width: 200px;
|
|
background-color: #ffffff;
|
|
}
|
|
.weixin-pay .pay-amount, .success-pay .pay-amount {
|
|
margin: 20px 0;
|
|
color: #787878;
|
|
}
|
|
.weixin-pay .pay-amount span, .success-pay .pay-amount span {
|
|
color: #F5A623;
|
|
}
|
|
</style><style type="text/css">
|
|
@charset "UTF-8";
|
|
/*
|
|
* 变量
|
|
*/
|
|
.v-modal-wrap {
|
|
position: fixed;
|
|
left: 0;
|
|
top: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
z-index: 9999;
|
|
background-color: transparent;
|
|
}
|
|
.v-modal-wrap.modal-leave-active {
|
|
-webkit-transition: opacity 0.3s;
|
|
-o-transition: opacity 0.3s;
|
|
transition: opacity 0.3s;
|
|
}
|
|
.v-modal-wrap.modal-enter-active .v-modal-mask, .v-modal-wrap.modal-leave-active .v-modal-mask {
|
|
opacity: 0;
|
|
}
|
|
.v-modal-wrap.modal-enter-active .v-modal, .v-modal-wrap.modal-leave-active .v-modal {
|
|
-webkit-transform: translate(-50%, -70%);
|
|
-ms-transform: translate(-50%, -70%);
|
|
transform: translate(-50%, -70%);
|
|
opacity: 0;
|
|
}
|
|
.v-modal-wrap .v-modal-mask {
|
|
background-color: rgba(255, 255, 255, 0.7);
|
|
position: absolute;
|
|
left: 0;
|
|
right: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
-webkit-transition: opacity 0.3s;
|
|
-o-transition: opacity 0.3s;
|
|
transition: opacity 0.3s;
|
|
opacity: 1;
|
|
}
|
|
.v-modal-wrap .v-modal {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
-webkit-transform: translate(-50%, -50%);
|
|
-ms-transform: translate(-50%, -50%);
|
|
transform: translate(-50%, -50%);
|
|
border-radius: 6px;
|
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
background-color: #fff;
|
|
-webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1);
|
|
box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1);
|
|
-webkit-transition: opacity 0.3s, -webkit-transform 0.3s;
|
|
transition: opacity 0.3s, -webkit-transform 0.3s;
|
|
-o-transition: opacity 0.3s, transform 0.3s;
|
|
transition: opacity 0.3s, transform 0.3s;
|
|
transition: opacity 0.3s, transform 0.3s, -webkit-transform 0.3s;
|
|
opacity: 1;
|
|
display: -webkit-box;
|
|
display: -webkit-flex;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-box-direction: normal;
|
|
-webkit-flex-direction: column;
|
|
-ms-flex-direction: column;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
.v-modal-wrap .v-modal > header:before, .v-modal-wrap .v-modal > header:after, .v-modal-wrap .v-modal > main:before, .v-modal-wrap .v-modal > main:after, .v-modal-wrap .v-modal > footer:before, .v-modal-wrap .v-modal > footer:after {
|
|
content: '';
|
|
clear: both;
|
|
display: table;
|
|
}
|
|
.v-modal-wrap .v-modal > header {
|
|
padding: 20px;
|
|
border-bottom: 1px solid #F0F0F0;
|
|
}
|
|
.v-modal-wrap .v-modal > header h4 {
|
|
margin: 0;
|
|
color: #333;
|
|
text-align: left;
|
|
}
|
|
.v-modal-wrap .v-modal .close {
|
|
position: absolute;
|
|
right: 16px;
|
|
top: 20px;
|
|
font-size: 26px;
|
|
line-height: 20px;
|
|
color: rgba(0, 0, 0, 0.8);
|
|
}
|
|
.v-modal-wrap .v-modal .close:hover {
|
|
color: #000000;
|
|
}
|
|
.v-modal-wrap .v-modal > main {
|
|
padding: 20px 20px 20px 20px;
|
|
font-size: 15px;
|
|
color: #333;
|
|
-webkit-box-flex: 1;
|
|
-webkit-flex-grow: 1;
|
|
-ms-flex-positive: 1;
|
|
flex-grow: 1;
|
|
overflow-x: hidden;
|
|
overflow-y: auto;
|
|
}
|
|
.v-modal-wrap .v-modal > footer {
|
|
padding: 20px;
|
|
background-color: #fff;
|
|
}
|
|
.v-modal-wrap .v-modal > footer button {
|
|
padding: 0;
|
|
margin: 0;
|
|
background-color: transparent;
|
|
border: 0;
|
|
float: right;
|
|
}
|
|
.v-modal-wrap .v-modal > footer button:focus {
|
|
outline: 0;
|
|
}
|
|
.v-modal-wrap .v-modal > footer .submit {
|
|
padding: 4px 12px;
|
|
border: 1px solid;
|
|
border-radius: 20px;
|
|
}
|
|
.v-modal-wrap .v-modal > footer .cancel {
|
|
margin-top: 5px;
|
|
}
|
|
.v-modal-wrap .v-modal > footer .cancel:hover {
|
|
color: #333333;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal-mask {
|
|
background-color: rgba(63, 63, 63, 0.7);
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal {
|
|
background-color: #3f3f3f;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal header {
|
|
border-color: #2F2F2F;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal header h4 {
|
|
color: #C8C8C8;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal .close {
|
|
color: #C8C8C8;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal .close:hover {
|
|
color: #ffffff;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal main {
|
|
color: #C8C8C8;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal footer {
|
|
background-color: #3f3f3f;
|
|
}
|
|
.reader-night-mode .v-modal-wrap .v-modal footer .cancel:hover {
|
|
color: #C8C8C8;
|
|
}
|
|
</style><style type="text/css">
|
|
@charset "UTF-8";
|
|
/*
|
|
* 变量
|
|
*/
|
|
.youdao-fixed-ad {
|
|
display: block;
|
|
position: relative;
|
|
width: 180px;
|
|
height: 180px;
|
|
}
|
|
.youdao-fixed-ad .img {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
background-size: cover;
|
|
}
|
|
.youdao-fixed-ad .ad-badge {
|
|
position: absolute;
|
|
bottom: 0;
|
|
right: 0;
|
|
display: block;
|
|
font-size: 12px;
|
|
padding: 2px 5px 0 6px;
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
color: #fff;
|
|
cursor: pointer;
|
|
}
|
|
</style><style type="text/css">
|
|
.yuxi-fixed-ad {
|
|
position: relative;
|
|
width: 180px;
|
|
height: 180px;
|
|
}
|
|
.yuxi-fixed-ad .img {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
background-size: cover;
|
|
background-image: url(//cdn2.jianshu.io/assets/web/yuxi-ads-d73b364baf42dfeca32d518c819a0136.jpg);
|
|
}
|
|
.yuxi-fixed-ad .ad-badge {
|
|
position: absolute;
|
|
bottom: 0;
|
|
right: 0;
|
|
display: block;
|
|
font-size: 12px;
|
|
padding: 2px 5px 0 6px;
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
color: #fff;
|
|
cursor: pointer;
|
|
}
|
|
</style><style type="text/css">
|
|
@charset "UTF-8";
|
|
/*
|
|
* 变量
|
|
*/
|
|
.like[data-v-6ddd02c6] {
|
|
display: inline-block;
|
|
}
|
|
.like .like-group[data-v-6ddd02c6] {
|
|
position: relative;
|
|
padding: 13px 0 15px 0;
|
|
font-size: 0;
|
|
border: 1px solid #EA6F5A;
|
|
border-radius: 40px;
|
|
}
|
|
.like .like-group[data-v-6ddd02c6]:hover {
|
|
background-color: rgba(236, 97, 73, 0.05);
|
|
}
|
|
.like .like-group .btn-like[data-v-6ddd02c6] {
|
|
display: inline-block;
|
|
font-size: 19px;
|
|
}
|
|
.like .like-group .btn-like[data-v-6ddd02c6]:before {
|
|
content: '';
|
|
position: absolute;
|
|
left: 12px;
|
|
top: 2px;
|
|
width: 50px;
|
|
height: 50px;
|
|
background-image: url(//cdn2.jianshu.io/assets/web/like_animation_steps-62a00a7b52377d3069927cdb8e61fd34.png);
|
|
background-position: left;
|
|
background-repeat: no-repeat;
|
|
background-size: 1000px 50px;
|
|
}
|
|
.like .like-group .btn-like a[data-v-6ddd02c6] {
|
|
position: relative;
|
|
padding: 18px 30px 18px 55px;
|
|
color: #EA6F5A;
|
|
}
|
|
.like .like-group .modal-wrap[data-v-6ddd02c6] {
|
|
font-size: 18px;
|
|
border-left: 1px solid rgba(236, 97, 73, 0.4);
|
|
display: inline-block;
|
|
margin-left: -15px;
|
|
}
|
|
.like .like-group .modal-wrap a[data-v-6ddd02c6] {
|
|
color: #EA6F5A;
|
|
padding: 18px 26px 18px 18px;
|
|
}
|
|
.like .like-group.like-animation[data-v-6ddd02c6], .like .like-group.active[data-v-6ddd02c6] {
|
|
background-color: #EA6F5A;
|
|
}
|
|
.like .like-group.like-animation .btn-like a[data-v-6ddd02c6], .like .like-group.active .btn-like a[data-v-6ddd02c6] {
|
|
color: white;
|
|
}
|
|
.like .like-group.like-animation .modal-wrap[data-v-6ddd02c6], .like .like-group.active .modal-wrap[data-v-6ddd02c6] {
|
|
border-left: 1px solid white;
|
|
}
|
|
.like .like-group.like-animation .modal-wrap a[data-v-6ddd02c6], .like .like-group.active .modal-wrap a[data-v-6ddd02c6] {
|
|
color: white;
|
|
}
|
|
.like .like-group.like-animation .btn-like[data-v-6ddd02c6]:before {
|
|
-webkit-animation: likeBlast-data-v-6ddd02c6 0.6s 1 steps(19);
|
|
animation: likeBlast-data-v-6ddd02c6 0.6s 1 steps(19);
|
|
background-position: right;
|
|
}
|
|
@-webkit-keyframes likeBlast {
|
|
0% {
|
|
background-position: left;
|
|
}
|
|
100% {
|
|
background-position: right;
|
|
}
|
|
}
|
|
@keyframes likeBlast-data-v-6ddd02c6 {
|
|
0% {
|
|
background-position: left;
|
|
}
|
|
100% {
|
|
background-position: right;
|
|
}
|
|
}
|
|
.like .like-group.active .btn-like[data-v-6ddd02c6]:before {
|
|
background-position: right;
|
|
}
|
|
</style><style type="text/css">
|
|
@charset "UTF-8";
|
|
/*
|
|
* 变量
|
|
*/
|
|
.main {
|
|
position: relative;
|
|
margin: 0 auto;
|
|
padding: 0 0 30px 0;
|
|
width: 620px;
|
|
}
|
|
.main .title {
|
|
padding-left: 8px;
|
|
border-left: 3px solid #EA6F5A;
|
|
line-height: 1;
|
|
font-size: 15px;
|
|
}
|
|
.main .collection-settings {
|
|
position: absolute;
|
|
top: 2px;
|
|
right: 0;
|
|
font-size: 13px;
|
|
color: #A0A0A0;
|
|
}
|
|
.main .collection-settings span {
|
|
padding-left: 4px;
|
|
}
|
|
.main .include-collection {
|
|
width: 100%;
|
|
padding-top: 20px;
|
|
display: -webkit-box;
|
|
display: -webkit-flex;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-orient: horizontal;
|
|
-webkit-box-direction: normal;
|
|
-webkit-flex-direction: row;
|
|
-ms-flex-direction: row;
|
|
flex-direction: row;
|
|
-webkit-box-pack: start;
|
|
-webkit-justify-content: flex-start;
|
|
-ms-flex-pack: start;
|
|
justify-content: flex-start;
|
|
-webkit-box-align: center;
|
|
-webkit-align-items: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
-webkit-flex-wrap: wrap;
|
|
-ms-flex-wrap: wrap;
|
|
flex-wrap: wrap;
|
|
}
|
|
.main .include-collection .item {
|
|
display: inline-block;
|
|
margin: 0 12px 12px 0;
|
|
min-height: 32px;
|
|
background-color: white;
|
|
border: 1px solid #DCDCDC;
|
|
border-radius: 4px;
|
|
vertical-align: top;
|
|
overflow: hidden;
|
|
}
|
|
.main .include-collection .item img {
|
|
width: 32px;
|
|
height: 32px;
|
|
}
|
|
.main .include-collection .item .name {
|
|
display: inline-block;
|
|
padding: 0 10px;
|
|
font-size: 14px;
|
|
}
|
|
.main .include-collection .add-collection-wrap {
|
|
margin: 0 12px 12px 0;
|
|
}
|
|
.main .include-collection .add-collection {
|
|
padding: 8px 12px;
|
|
font-size: 14px;
|
|
border: 1px solid #DCDCDC;
|
|
border-radius: 4px;
|
|
}
|
|
.main .include-collection .add-collection i {
|
|
margin-right: 4px;
|
|
color: #969696;
|
|
}
|
|
.main .recommend-note a {
|
|
position: relative;
|
|
margin: 20px 2px 0 0;
|
|
width: 200px;
|
|
height: 160px;
|
|
display: inline-block;
|
|
}
|
|
.main .recommend-note a:after {
|
|
content: "";
|
|
position: absolute;
|
|
width: 200px;
|
|
height: 160px;
|
|
border-radius: 0 0 4px 4px;
|
|
-webkit-box-shadow: inset 0px -80px 50px -22px rgba(0, 0, 0, 0.6);
|
|
box-shadow: inset 0px -80px 50px -22px rgba(0, 0, 0, 0.6);
|
|
top: 0;
|
|
left: 0;
|
|
z-index: 1;
|
|
}
|
|
.main .recommend-note .name {
|
|
position: absolute;
|
|
bottom: 40px;
|
|
left: 10px;
|
|
right: 10px;
|
|
font-size: 17px;
|
|
font-weight: bold;
|
|
color: #ffffff;
|
|
z-index: 2;
|
|
}
|
|
.main .recommend-note .author {
|
|
position: absolute;
|
|
bottom: 10px;
|
|
left: 10px;
|
|
right: 10px;
|
|
z-index: 2;
|
|
}
|
|
.main .recommend-note .avatar {
|
|
width: 20px;
|
|
height: 20px;
|
|
display: inline-block;
|
|
}
|
|
.main .recommend-note .avatar img {
|
|
border-radius: 50%;
|
|
}
|
|
.main .recommend-note .author-name {
|
|
font-size: 12px;
|
|
color: #ffffff;
|
|
display: inline-block;
|
|
vertical-align: -1px;
|
|
}
|
|
.main .show-more {
|
|
margin: 0 12px 12px 0;
|
|
font-size: 14px;
|
|
color: #A0A0A0;
|
|
}
|
|
</style><style type="text/css">
|
|
#featured-comment-list {
|
|
margin-top: 30px;
|
|
margin-bottom: -15px;
|
|
}
|
|
</style><style type="text/css">
|
|
@charset "UTF-8";
|
|
/*
|
|
* 变量
|
|
*/
|
|
.pc-bind-phone-modal .modal-content, .pc-bind-phone-modal .modal-body {
|
|
overflow: visible;
|
|
}
|
|
.pc-bind-phone-modal .modal-body {
|
|
padding-top: 14px;
|
|
}
|
|
.pc-bind-phone-modal .dropdown-menu {
|
|
max-height: 300px;
|
|
overflow: auto;
|
|
}
|
|
.pc-bind-phone-modal .dropdown-menu .tag {
|
|
background-color: #efefef;
|
|
color: #4A4A4A;
|
|
height: 28px;
|
|
line-height: 28px;
|
|
padding-left: 25px;
|
|
font-size: 12px;
|
|
}
|
|
.pc-bind-phone-modal .tips {
|
|
color: #999999;
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
line-height: 18px;
|
|
margin-bottom: 14px;
|
|
}
|
|
.pc-bind-phone-modal .tips a {
|
|
color: #3194D0;
|
|
}
|
|
.reader-night-mode .pc-bind-phone-modal .dropdown-menu .tag {
|
|
background-color: #2F2F2F;
|
|
color: #999999;
|
|
}
|
|
</style></head>
|
|
|
|
<!-- 只给10%的用户添加代码 -->
|
|
<!-- ###第四范式-智能推荐:代码直接复制 无需修改参数### -->
|
|
<!-- ###功能:上报内容并反馈用户行为### -->
|
|
<!--
|
|
-->
|
|
<body lang="zh-CN" class="reader-black-font">
|
|
<!-- 全局顶部导航栏 -->
|
|
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
|
|
<div class="width-limit">
|
|
<!-- 左上方 Logo -->
|
|
<a class="logo" href="https://www.jianshu.com/"><img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/nav-logo-4c7bbafe27adc892f3046e6978459bac.png" alt="Nav logo"></a>
|
|
|
|
<!-- 右上角 -->
|
|
<!-- 未登录显示登录/注册/写文章 -->
|
|
<a class="btn write-btn" target="_blank" href="https://www.jianshu.com/writer#/">
|
|
<i class="iconfont ic-write"></i>写文章
|
|
</a> <a class="btn sign-up" id="sign_up" href="https://www.jianshu.com/sign_up">注册</a>
|
|
<a class="btn log-in" id="sign_in" href="https://www.jianshu.com/sign_in">登录</a>
|
|
|
|
<!-- 如果用户登录,显示下拉菜单 -->
|
|
|
|
<div class="style-mode"><a class="style-mode-btn"><i class="iconfont ic-navigation-mode"></i></a> <div class="popover-modal" style="left: 0px; display: none;"><div class="meta"><i class="iconfont ic-navigation-night"></i><span>夜间模式</span></div> <div class="switch day-night-group"><a class="switch-btn">开</a> <a class="switch-btn active">关</a></div> <hr> <div class="switch font-family-group"><a class="switch-btn font-song">宋体</a> <a class="switch-btn font-hei active">黑体</a></div> <div class="switch"><a class="switch-btn active">简</a> <a class="switch-btn">繁</a></div></div></div>
|
|
<div class="container">
|
|
<div class="navbar-header">
|
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#menu" aria-expanded="false">
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</button>
|
|
</div>
|
|
<div class="collapse navbar-collapse" id="menu">
|
|
<ul class="nav navbar-nav">
|
|
<li class="tab ">
|
|
<a href="https://www.jianshu.com/">
|
|
<span class="menu-text">首页</span><i class="iconfont ic-navigation-discover menu-icon"></i>
|
|
</a> </li>
|
|
<li class="tab ">
|
|
<a id="web-nav-app-download-btn" class="app-download-btn" href="https://www.jianshu.com/apps?utm_medium=desktop&utm_source=navbar-apps"><span class="menu-text">下载App</span><i class="iconfont ic-navigation-download menu-icon"></i></a>
|
|
</li>
|
|
<li class="search">
|
|
<form target="_blank" action="https://www.jianshu.com/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓">
|
|
<input type="text" name="q" id="q" value="" autocomplete="off" placeholder="搜索" class="search-input">
|
|
<a class="search-btn" href="javascript:void(null)"><i class="iconfont ic-search"></i></a>
|
|
</form> </li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
|
|
<div class="note">
|
|
<div id="note-fixed-ad-container">
|
|
<div id="fixed-ad-container">
|
|
<div style="display: block;"><a target="_blank" href="https://www.jianshu.com/apps/redirect?utm_source=side-banner-click" id="web-note-ad-fixed"><span class="close">×</span></a></div>
|
|
<a href="https://dsp-click.youdao.com/clk/request.s?slot=30edd91dd8637d9f645baa8448ba90b3&k=9usVNZYygri1cBtmRbYbFMiUVlaH5dNTIcUo3KMWkcrXxo%2BoRxcJpjjAgKuViCqvIxCHqA9N%2F2c%2F9Be%2FcwcSrz8jlSF4FTn%2BQXEalddfU4mrT21YdvKJqfvgOQ0YiEnAZgtkNAtg%2F%2FerZYJg4019lqLfXzigFXP%2BTqfYGyVrn0xv0yDKGUJ9hEviGVibSX2HEA7md3Hq7BOhGrSke341nqVN6BVwkooxryLvadi1XpsUmDcRLOYhYCSzGsT%2BHryqt%2B0MDz5bXHoJFk0KiyBQH8Bc8hTRkDkpUdNHMN2yVKT%2BEc%2Bd1jbbq9hGJq0XLIGZMHMNk0HBE7d6E4vICqnJAl16Cg%2BsHjwne1fg0d0rY8FeoCYHBX8ZiJ9u6zuhLEA5tlH56qtVR4M6sYv7BUdPp33vH%2FyGv4F5k%2Flny87eIES0ckvkITsO1u5zUtRET2JoCUIY1nS%2BU%2BiXpN%2B1mBywm%2BJCvUUbD7ARLgrbV6V7v0Ap3DXt0HuGReB8cXG4v14BvDLGB0rlms2t2kmjw3g3g3tQW%2FRVuaYRauWej6r2RkfFPQxgvCMp4t8sYQNqIYTuQNcpSJkTcjGHQZ%2FuBfrhBpKArhJsTAkXUW34%2BZ2phFqbh4%2BjT%2F11uNNvK3GK5tjDM5x63sKEu1XU3FWGKGmdU5%2B22bcmz1SyfwWDh6y94cOkD2ygWqbgSaJPwxtbL8HEAC3Pug1CLYnCw9bgu99jIiH1SGUoSsPCZ7lU%2BifAgmVR2nuubvDODj6HOBZvClbJ%2F3hEEhXCSxuDgHlbKQlw9Sln3Xg%2FDrCbmXDfaGSF5ElAts1IwYimosSz4%2FG41vEnrn4j5qZ0va4dPKwRk53VIe2sU09bGZUguD6y5pCamfC0TYVyBYv%2B4QV5ietS2T3%2BnW7a09KS5u0smc2SoUvq6I1fDy65DXwUpEAalPheVomq4uH2DeUfMDoelp6%2BjXg62lzl0wtQIK5mdA%2BtkY6ZSamv3ZVYyKi1yHm%2FKQGcwapDugMbH40d5%2F6WXbCt9fjCbJ3utub4%2FASJuOZsSUabZWuvGMWRNprQQxp3IhlYL5LY9J7lNtV8tplFCdjWuqhxRzykVRYmlVXc8iKe%2FLDVp87%2B7y%2Fn7kKFFl%2B6HV13%2Bsf63Q%2FMVO2lD%2FjmN6RGuYS4YTGayBxg1CrEEAuRj3OC3VEIWDeuSt8OSKTxwUlGuFruRBzIVOvL2teCoTygKEa218aPqEcXCaY4wICrlYgqr9fGj6hHFwmmOMCAq5WIKq%2FXxo%2BoRxcJpjjAgKuViCqvyNwKuVwespGsglRASHng%2BA%3D%3D&youdao_bid=4bd6439f-ecef-4c1d-a518-3afaa914db65&iid=%7B%228425123272024812218%22%3A4%7D&sid=17024" target="_blank" class="youdao-fixed-ad"><div class="img" style="background-image: url("https://oimagea6.ydstatic.com/image?id=8425123272024812218&product=adpublish&w=360&h=360&sc=0&rm=2&gsb=0&gsbd=60");"></div> <span class="ad-badge">广告</span></a>
|
|
<a href="http://e.cn.miaozhen.com/r/k=2110413&p=7L9Gn&dx=__IPDX__&rt=2&ns=__IP__&ni=__IESID__&v=__LOC__&xa=__ADPLATFORM__&tr=__REQUESTID__&mo=__OS__&m0=__OPENUDID__&m0a=__DUID__&m1=__ANDROIDID1__&m1a=__ANDROIDID__&m2=__IMEI__&m4=__AAID__&m5=__IDFA__&m6=__MAC1__&m6a=__MAC__&vo=3f2e070eb&vr=2&o=https%3A%2F%2Fwww.jianshu.com%2Fp%2Fee05f7eff678" target="_blank" class="yuxi-fixed-ad" style="display: none;"><div class="img"></div> <span class="ad-badge">广告</span></a>
|
|
<div id="_so_pdsBy_0"></div>
|
|
</div>
|
|
</div>
|
|
<div class="post">
|
|
<div class="article">
|
|
<h1 class="title">Android FFmpeg JNI开发入门_编译不同ABI的so库</h1>
|
|
|
|
<!-- 作者区域 -->
|
|
<div class="author">
|
|
<a class="avatar" href="https://www.jianshu.com/u/6bbd449f10f5">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/5bb2c3fd-6885-4dbb-8331-38741b900a34.jpg" alt="96">
|
|
</a> <div class="info">
|
|
<span class="name"><a href="https://www.jianshu.com/u/6bbd449f10f5">张俊峰0613</a></span>
|
|
<!-- 关注用户按钮 -->
|
|
<a class="btn btn-success follow"><i class="iconfont ic-follow"></i><span>关注</span></a>
|
|
<!-- 文章数据信息 -->
|
|
<div class="meta">
|
|
<!-- 简书钻 -->
|
|
<!-- 如果文章更新时间大于发布时间,那么使用 tooltip 显示更新时间 -->
|
|
<span class="publish-time" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="最后编辑于 2018.12.24 14:16">2018.11.12 20:00*</span>
|
|
<span class="wordage">字数 629</span>
|
|
<span class="views-count">阅读 65</span><span class="comments-count">评论 0</span><span class="likes-count">喜欢 0</span></div>
|
|
</div>
|
|
<!-- 如果是当前作者,加入编辑按钮 -->
|
|
</div>
|
|
|
|
|
|
<!-- 文章内容 -->
|
|
<div data-note-content="" class="show-content">
|
|
<div class="show-content-free">
|
|
<h1>前言</h1>
|
|
<p>学习了上一篇<a href="https://www.jianshu.com/p/8321a7a9b1bd" target="_blank">Android FFmpeg JNI开发入门_01</a>,就算FFmpeg的JNI开发已经算入门了,但是上一篇中只编译了armeabi的so库,这一篇中将编译出其他类型的CPU架构的so库。由于本人也是新手,所以方法可能比较笨。</p>
|
|
<h1>0. ABI和CPU的关系</h1>
|
|
<h2>主流的ABI架构</h2>
|
|
<ol>
|
|
<li>armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年以后的生产的大部分Android设备都使用它。</li>
|
|
<li>arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。</li>
|
|
<li>armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。</li>
|
|
<li>x86: 平板、模拟器用得比较多。</li>
|
|
<li>x86_64: 64位的平板。</li>
|
|
</ol>
|
|
<p>当一个应用被安装在设备上时,只有该设备支持的CPU架构对应的.so文件会被安装,如果支持多个ABI架构,会按照优先级进行按照</p>
|
|
<h2>具体的支持类型如下</h2>
|
|
<div class="image-package">
|
|
<div class="image-container" style="max-width: 700px; max-height: 407px; background-color: transparent;">
|
|
<div class="image-container-fill" style="padding-bottom: 35.15%;"></div>
|
|
<div class="image-view" data-width="1158" data-height="407"><img data-original-src="//upload-images.jianshu.io/upload_images/13903214-34e1d9e3a7132b3d.png" data-original-width="1158" data-original-height="407" data-original-format="image/png" data-original-filesize="39747" class="" style="cursor: zoom-in;" src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/13903214-34e1d9e3a7132b3d.png"></div>
|
|
</div>
|
|
<div class="image-caption">ABI与CPU</div>
|
|
</div>
|
|
<p>可以看出CPU大都是向前兼容的,但是选择ABI时会有个优先级。</p>
|
|
<p>比如X86型的CPU,优先选择x86目录下的.so包,如果存在,就不会再安装其他支持的ABI架构;如果没有x86目录,才会选择armeabi-v7a目录下的.so,最后才会选择armeabi目录下的.so文件。</p>
|
|
<h2>查看手机的CPU架构</h2>
|
|
<p>使用adb工具(在adb.exe下执行命令):</p>
|
|
<blockquote>
|
|
<p>adb shell<br>
|
|
cat /proc/cpuinfo</p>
|
|
</blockquote>
|
|
<h2>使用android-21平台版本编译的.so文件运行在android-15的设备上</h2>
|
|
<p>使用NDK时,你可能会倾向于使用最新的编译平台,但事实上这是错误的,因为NDK平台不是后向兼容的,而是前向兼容的。推荐使用app的minSdkVersion对应的编译平台。</p>
|
|
<p>这也意味着当你引入一个预编译好的.so文件时,你需要检查它被编译所用的平台版本。</p>
|
|
<h1>1.准备</h1>
|
|
<p><strong>Linux 环境(Ubuntu 16.04)</strong>:64位<br>
|
|
<strong>NDK版本</strong> :android-ndk-r12b<br>
|
|
<strong>下载 FFmpeg (ffmpeg-3.2.12)</strong>: 官网下载链接:<a href="https://ffmpeg.org/download.html" target="_blank" rel="nofollow">https://ffmpeg.org/download.html</a></p>
|
|
<h1>2. 修改configure</h1>
|
|
<pre class="hljs bash"><code class="bash"><span class="hljs-comment"># 将 configure 文件中的:</span>
|
|
SLIBNAME_WITH_MAJOR=<span class="hljs-string">'$(SLIBNAME).$(LIBMAJOR)'</span>
|
|
LIB_INSTALL_EXTRA_CMD=<span class="hljs-string">'$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'</span>
|
|
SLIB_INSTALL_NAME=<span class="hljs-string">'$(SLIBNAME_WITH_VERSION)'</span>
|
|
SLIB_INSTALL_LINKS=<span class="hljs-string">'$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'</span>
|
|
|
|
<span class="hljs-comment">#替换为:</span>
|
|
SLIBNAME_WITH_MAJOR=<span class="hljs-string">'$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'</span>
|
|
LIB_INSTALL_EXTRA_CMD=<span class="hljs-string">'$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'</span>
|
|
SLIB_INSTALL_NAME=<span class="hljs-string">'$(SLIBNAME_WITH_MAJOR)'</span>
|
|
SLIB_INSTALL_LINKS=<span class="hljs-string">'$(SLIBNAME)'</span>
|
|
</code></pre>
|
|
<h1>3. 编写shell脚本文件</h1>
|
|
<p><strong>ANDROID_VERSION一定要大于21,否则编译arm64_v8a时会报错</strong></p>
|
|
<pre class="hljs bash"><code class="bash"><span class="hljs-meta">#!/bin/sh
|
|
</span>
|
|
MY_LIBS_NAME=ffmpeg-3.2.12
|
|
MY_DIR=ffmpeg-3.2.12
|
|
|
|
<span class="hljs-comment"># cd ./${MY_DIR}</span>
|
|
|
|
<span class="hljs-comment">#编译的过程中产生的中间件的存放目录,为了区分编译目录,源码目录,install目录</span>
|
|
MY_BUILD_DIR=binary
|
|
|
|
|
|
BUILD_PLATFORM=linux-x86_64
|
|
TOOLCHAIN_VERSION=4.9
|
|
ANDROID_VERSION=21
|
|
|
|
ANDROID_ARMV5_CFLAGS=<span class="hljs-string">"-march=armv5te"</span>
|
|
ANDROID_ARMV7_CFLAGS=<span class="hljs-string">"-march=armv7-a -mfloat-abi=softfp -mfpu=neon"</span> <span class="hljs-comment">#-mfloat-abi=hard -mfpu=vfpv3-d16 #-mfloat-abi=hard -mfpu=vfp</span>
|
|
ANDROID_ARMV8_CFLAGS=<span class="hljs-string">"-march=armv8-a"</span>
|
|
ANDROID_X86_CFLAGS=<span class="hljs-string">"-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"</span>
|
|
ANDROID_X86_64_CFLAGS=<span class="hljs-string">"-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel -nostdlib"</span>
|
|
|
|
|
|
<span class="hljs-comment"># params($1:arch,$2:arch_abi,$3:host,$4:cross_prefix,$5:cflags)</span>
|
|
<span class="hljs-function"><span class="hljs-title">build_bin</span></span>() {
|
|
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"-------------------star build <span class="hljs-variable">$2</span>-------------------------"</span>
|
|
|
|
ARCH=<span class="hljs-variable">$1</span> <span class="hljs-comment"># arm arm64 x86 x86_64</span>
|
|
ANDROID_ARCH_ABI=<span class="hljs-variable">$2</span> <span class="hljs-comment"># armeabi armeabi-v7a x86 mips</span>
|
|
|
|
PREFIX=$(<span class="hljs-built_in">pwd</span>)/dist/<span class="hljs-variable">${MY_LIBS_NAME}</span>/<span class="hljs-variable">${ANDROID_ARCH_ABI}</span>/
|
|
|
|
HOST=<span class="hljs-variable">$3</span>
|
|
SYSROOT=<span class="hljs-variable">$NDK_HOME</span>/platforms/android-<span class="hljs-variable">${ANDROID_VERSION}</span>/arch-<span class="hljs-variable">${ARCH}</span>
|
|
|
|
CFALGS=<span class="hljs-variable">$5</span>
|
|
|
|
|
|
TOOLCHAIN=<span class="hljs-variable">$NDK_HOME</span>/toolchains/<span class="hljs-variable">${HOST}</span>-<span class="hljs-variable">${TOOLCHAIN_VERSION}</span>/prebuilt/<span class="hljs-variable">${BUILD_PLATFORM}</span>
|
|
CROSS_PREFIX=<span class="hljs-variable">${TOOLCHAIN}</span>/bin/<span class="hljs-variable">$4</span>-
|
|
|
|
<span class="hljs-comment"># build 中间件</span>
|
|
BUILD_DIR=./<span class="hljs-variable">${MY_BUILD_DIR}</span>/<span class="hljs-variable">${ANDROID_ARCH_ABI}</span>
|
|
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"pwd==<span class="hljs-variable">$(pwd)</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"ARCH==<span class="hljs-variable">${ARCH}</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"PREFIX==<span class="hljs-variable">${PREFIX}</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"HOST==<span class="hljs-variable">${HOST}</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"SYSROOT=<span class="hljs-variable">${SYSROOT}</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"CFALGS=<span class="hljs-variable">$5</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"CFALGS=<span class="hljs-variable">${CFALGS}</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"TOOLCHAIN==<span class="hljs-variable">${TOOLCHAIN}</span>"</span>
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"CROSS_PREFIX=<span class="hljs-variable">${CROSS_PREFIX}</span>"</span>
|
|
|
|
<span class="hljs-comment">#echo "-------------------------按任意键继续---------------------"</span>
|
|
<span class="hljs-comment">#read -n 1</span>
|
|
<span class="hljs-comment">#echo "-------------------------继续执行-------------------------"</span>
|
|
|
|
mkdir -p <span class="hljs-variable">${BUILD_DIR}</span> <span class="hljs-comment">#创建当前arch_abi的编译目录,比如:binary/armeabi-v7a</span>
|
|
<span class="hljs-built_in">cd</span> <span class="hljs-variable">${BUILD_DIR}</span> <span class="hljs-comment">#此处 进了当前arch_abi的2级编译目录</span>
|
|
|
|
|
|
sh ../../<span class="hljs-variable">${MY_DIR}</span>/configure \
|
|
--prefix=<span class="hljs-variable">${PREFIX}</span> \
|
|
--target-os=linux \
|
|
--arch=<span class="hljs-variable">${ARCH}</span> \
|
|
--sysroot=<span class="hljs-variable">$SYSROOT</span> \
|
|
--<span class="hljs-built_in">enable</span>-cross-compile \
|
|
--cross-prefix=<span class="hljs-variable">${CROSS_PREFIX}</span> \
|
|
--extra-cflags=<span class="hljs-string">"<span class="hljs-variable">$CFALGS</span> -Os -fPIC -DANDROID -Wfatal-errors -Wno-deprecated"</span> \
|
|
--extra-cxxflags=<span class="hljs-string">"-D__thumb__ -fexceptions -frtti"</span> \
|
|
--extra-ldflags=<span class="hljs-string">"-L<span class="hljs-variable">${SYSROOT}</span>/usr/lib"</span> \
|
|
--<span class="hljs-built_in">enable</span>-shared \
|
|
--<span class="hljs-built_in">enable</span>-asm \
|
|
--<span class="hljs-built_in">enable</span>-neon \
|
|
--<span class="hljs-built_in">enable</span>-postproc \
|
|
--<span class="hljs-built_in">enable</span>-gpl \
|
|
--<span class="hljs-built_in">disable</span>-doc \
|
|
--<span class="hljs-built_in">disable</span>-ffmpeg \
|
|
--<span class="hljs-built_in">disable</span>-ffplay \
|
|
--<span class="hljs-built_in">disable</span>-ffprobe \
|
|
--<span class="hljs-built_in">disable</span>-symver \
|
|
--<span class="hljs-built_in">disable</span>-debug \
|
|
--<span class="hljs-built_in">enable</span>-small
|
|
|
|
|
|
make clean
|
|
make
|
|
make install
|
|
|
|
<span class="hljs-comment">#从当前arch_abi编译目录跳出,对应上面的cd ${BUILD_DIR},以便function多次执行</span>
|
|
<span class="hljs-built_in">cd</span> ../../
|
|
|
|
<span class="hljs-built_in">echo</span> <span class="hljs-string">"-------------------<span class="hljs-variable">$2</span> build end-------------------------"</span>
|
|
}
|
|
|
|
|
|
<span class="hljs-comment"># build armeabi</span>
|
|
build_bin arm armeabi arm-linux-androideabi arm-linux-androideabi <span class="hljs-string">"<span class="hljs-variable">$ANDROID_ARMV5_CFLAGS</span>"</span>
|
|
|
|
<span class="hljs-comment">#build armeabi-v7a</span>
|
|
build_bin arm armeabi-v7a arm-linux-androideabi arm-linux-androideabi <span class="hljs-string">"<span class="hljs-variable">$ANDROID_ARMV7_CFLAGS</span>"</span>
|
|
|
|
<span class="hljs-comment">#build arm64-v8a</span>
|
|
build_bin arm64 arm64-v8a aarch64-linux-android aarch64-linux-android <span class="hljs-string">"<span class="hljs-variable">$ANDROID_ARMV8_CFLAGS</span>"</span>
|
|
|
|
<span class="hljs-comment">#build x86</span>
|
|
build_bin x86 x86 x86 i686-linux-android <span class="hljs-string">"<span class="hljs-variable">$ANDROID_X86_CFLAGS</span>"</span>
|
|
|
|
<span class="hljs-comment">#build x86_64</span>
|
|
build_bin x86_64 x86_64 x86_64 x86_64-linux-android <span class="hljs-string">"<span class="hljs-variable">$ANDROID_X86_64_CFLAGS</span>"</span>
|
|
</code></pre>
|
|
<p>放在FFmpeg源码同级文件夹下,添加可执行权限后运行:</p>
|
|
<blockquote>
|
|
<p>chmod +x build.sh<br>
|
|
./build.sh</p>
|
|
</blockquote>
|
|
<p>编译成功后:<br>
|
|
</p><div class="image-package">
|
|
<div class="image-container" style="max-width: 505px; max-height: 103px; background-color: transparent;">
|
|
<div class="image-container-fill" style="padding-bottom: 20.4%;"></div>
|
|
<div class="image-view" data-width="505" data-height="103"><img data-original-src="//upload-images.jianshu.io/upload_images/13903214-7e61f6adf187f042.png" data-original-width="505" data-original-height="103" data-original-format="image/png" data-original-filesize="29215" class="" style="cursor: zoom-in;" src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/13903214-7e61f6adf187f042.png"></div>
|
|
</div>
|
|
<div class="image-caption">编译成功后目录</div>
|
|
</div><br>
|
|
dist目录下是不同ABI的库:<br>
|
|
<div class="image-package">
|
|
<div class="image-container" style="max-width: 591px; max-height: 126px; background-color: transparent;">
|
|
<div class="image-container-fill" style="padding-bottom: 21.32%;"></div>
|
|
<div class="image-view" data-width="591" data-height="126"><img data-original-src="//upload-images.jianshu.io/upload_images/13903214-9a8dd65f1ee753e6.png" data-original-width="591" data-original-height="126" data-original-format="image/png" data-original-filesize="37597" class="" style="cursor: zoom-in;" src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/13903214-9a8dd65f1ee753e6.png"></div>
|
|
</div>
|
|
<div class="image-caption">dist目录</div>
|
|
</div><br>
|
|
源码地址:<a href="https://github.com/Xiaoben336/FFmpegCommand" target="_blank" rel="nofollow">https://github.com/Xiaoben336/FFmpegCommand</a><p></p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 如果是付费文章,未购买,则显示购买按钮 -->
|
|
|
|
<!-- 连载目录项 -->
|
|
|
|
<!-- 如果是付费文章 -->
|
|
<!-- 如果是付费连载,已购买,且作者允许赞赏,则显示付费信息和赞赏 -->
|
|
<div id="free-reward-panel" class="support-author"><p>小礼物走一走,来简书关注我</p> <div class="btn btn-pay">赞赏支持</div> <div class="supporter"><ul class="support-list"></ul> <!----></div> <!----> <!----></div>
|
|
|
|
<div class="show-foot">
|
|
<a class="notebook" href="https://www.jianshu.com/nb/31195242">
|
|
<i class="iconfont ic-search-notebook"></i>
|
|
<span>FFmpeg</span>
|
|
</a> <div class="copyright" data-toggle="tooltip" data-html="true" data-original-title="转载请联系作者获得授权,并标注“简书作者”。">
|
|
© 著作权归作者所有
|
|
</div>
|
|
<div class="modal-wrap" data-report-note="">
|
|
<a id="report-modal">举报文章</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 文章底部作者信息 -->
|
|
<div class="follow-detail">
|
|
<div class="info">
|
|
<a class="avatar" href="https://www.jianshu.com/u/6bbd449f10f5">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/5bb2c3fd-6885-4dbb-8331-38741b900a34.jpg" alt="96">
|
|
</a> <a class="btn btn-success follow"><i class="iconfont ic-follow"></i><span>关注</span></a>
|
|
<a class="title" href="https://www.jianshu.com/u/6bbd449f10f5">张俊峰0613</a>
|
|
<i class="iconfont ic-man"></i>
|
|
<p>写了 45891 字,被 19 人关注,获得了 63 个喜欢</p></div>
|
|
<div class="signature">android音视频
|
|
https://github.com/Xiaoben336</div>
|
|
</div>
|
|
|
|
<div class="meta-bottom">
|
|
<div data-v-6ddd02c6="" class="like"><div data-v-6ddd02c6="" class="btn like-group"><div data-v-6ddd02c6="" class="btn-like"><a data-v-6ddd02c6="">喜欢</a></div> <!----></div> <!----></div>
|
|
<div class="share-group">
|
|
<a class="share-circle" data-action="weixin-share" data-toggle="tooltip" data-original-title="分享到微信">
|
|
<i class="iconfont ic-wechat"></i>
|
|
</a>
|
|
<a class="share-circle" data-action="weibo-share" data-toggle="tooltip" href="javascript:void((function(s,d,e,r,l,p,t,z,c){var%20f='http://v.t.sina.com.cn/share/share.php?appkey=1881139527',u=z||d.location,p=['&url=',e(u),'&title=',e(t||d.title),'&source=',e(r),'&sourceUrl=',e(l),'&content=',c||'gb2312','&pic=',e(p||'')].join('');function%20a(){if(!window.open([f,p].join(''),'mb',['toolbar=0,status=0,resizable=1,width=440,height=430,left=',(s.width-440)/2,',top=',(s.height-430)/2].join('')))u.href=[f,p].join('');};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();})(screen,document,encodeURIComponent,'','','', '推荐 张俊峰0613 的文章《Android FFmpeg JNI开发入门_编译不同ABI的so库》( 分享自 @简书 )','https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weibo','页面编码gb2312|utf-8默认gb2312'));" data-original-title="分享到微博">
|
|
<i class="iconfont ic-weibo"></i>
|
|
</a>
|
|
<a class="share-circle" data-toggle="tooltip" id="longshare" target="_blank" data-original-title="" title="">
|
|
<div class="qrcode" id="qrcode">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/download-index-side-qrcode-cb13fc9106a478795f8d10f9f632fccf.png" alt="Download index side qrcode">
|
|
<p>下载app生成长微博图片</p>
|
|
</div>
|
|
<i class="iconfont ic-picture"></i>
|
|
</a>
|
|
<a class="share-circle more-share" tabindex="0" data-toggle="popover" data-placement="top" data-html="true" data-trigger="focus" href="javascript:void(0);" data-content="
|
|
<ul class="share-list">
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=qzone')+'&title='+e('推荐 张俊峰0613 的文章《Android FFmpeg JNI开发入门_编译不同ABI的so库》'),x=function(){if(!window.open(r,'qzone','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-zone"></i><span>分享到QQ空间</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='https://twitter.com/share?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=twitter')+'&text='+e('推荐 张俊峰0613 的文章《Android FFmpeg JNI开发入门_编译不同ABI的so库》( 分享自 @jianshucom )')+'&related='+e('jianshucom'),x=function(){if(!window.open(r,'twitter','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-twitter"></i><span>分享到Twitter</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='https://www.facebook.com/dialog/share?app_id=483126645039390&display=popup&href=https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=facebook',x=function(){if(!window.open(r,'facebook','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-facebook"></i><span>分享到Facebook</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='https://plus.google.com/share?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=google_plus'),x=function(){if(!window.open(r,'google_plus','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-google"></i><span>分享到Google+</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:'',r='http://www.douban.com/recommend/?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=douban')+'&title='+e('Android FFmpeg JNI开发入门_编译不同ABI的so库')+'&sel='+e(s)+'&v=1',x=function(){if(!window.open(r,'douban','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r+'&r=1'};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()"><i class="social-icon-sprite social-icon-douban"></i><span>分享到豆瓣</span></a></li>
|
|
</ul>
|
|
" data-original-title="" title="">更多分享</a>
|
|
</div>
|
|
</div>
|
|
|
|
<a id="web-note-ad-1" target="_blank" href="https://www.jianshu.com/apps/redirect?utm_source=note-bottom-click"><img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/web-note-ad-1-c2e1746859dbf03abe49248893c9bea4.png" alt="Web note ad 1"></a>
|
|
|
|
<!--
|
|
<div id="note-comment-above-ad-container">
|
|
<span id="youdao-comment-ad" class="ad-badge">广告</span>
|
|
</div>
|
|
-->
|
|
<div><div id="comment-list" class="comment-list"><div><form class="new-comment"><a class="avatar"><img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/avatar_default-78d4d1f68984cd6d4379508dd94b4210.png"></a> <div class="sign-container"><a href="https://www.jianshu.com/sign_in?utm_source=desktop&utm_medium=not-signed-in-comment-form" class="btn btn-sign">登录</a> <span>后发表评论</span></div></form> <!----></div> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> <div id="normal-comment-list" class="normal-comment-list"><div><!----> <div><div class="top-title"><span>评论</span> <a class="close-btn" style="display: none;">关闭评论</a></div> <div class="no-comment"></div> <div class="text">
|
|
智慧如你,不想<a href="https://www.jianshu.com/sign_in?utm_source=desktop&utm_medium=not-signed-in-nocomments-text">发表一点想法</a>咩~
|
|
</div></div> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> </div></div> <!----> <div><!----></div></div></div>
|
|
</div>
|
|
|
|
<div class="side-tool"><ul><li data-placement="left" data-toggle="tooltip" data-container="body" data-original-title="回到顶部" style=""><a class="function-button"><i class="iconfont ic-backtop"></i></a></li> <!----> <!----> <!----> <!----> <li data-placement="left" data-toggle="tooltip" data-container="body" data-original-title="分享文章" id="share"><a tabindex="0" role="button" data-toggle="popover" data-placement="left" data-html="true" data-trigger="focus" href="javascript:void(0);" data-content="<ul class='share-list' style="width:220px">
|
|
<li><a class="weixin-share"><i class="social-icon-sprite social-icon-weixin"></i><span>分享到微信</span></a></li>
|
|
<li><a href="javascript:void((function(s,d,e,r,l,p,t,z,c){var%20f='http://v.t.sina.com.cn/share/share.php?appkey=1881139527',u=z||d.location,p=['&url=',e(u),'&title=',e(t||d.title),'&source=',e(r),'&sourceUrl=',e(l),'&content=',c||'gb2312','&pic=',e(p||'')].join('');function%20a(){if(!window.open([f,p].join(''),'mb',['toolbar=0,status=0,resizable=1,width=440,height=430,left=',(s.width-440)/2,',top=',(s.height-430)/2].join('')))u.href=[f,p].join('');};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();})(screen,document,encodeURIComponent,'','','', '推荐 张俊峰0613 的文章《Android FFmpeg JNI开发入门_编译不同ABI的so库》( 分享自 @简书 )','https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weibo','页面编码gb2312|utf-8默认gb2312'));"><i class='social-icon-sprite social-icon-weibo'></i><span>分享到微博</span></a></li>
|
|
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=qzone')+'&title='+e('推荐 张俊峰0613 的文章《Android FFmpeg JNI开发入门_编译不同ABI的so库》'),x=function(){if(!window.open(r,'qzone','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class='social-icon-sprite social-icon-zone'></i><span>分享到QQ空间</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='https://twitter.com/share?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=twitter')+'&text='+e('推荐 张俊峰0613 的文章《Android FFmpeg JNI开发入门_编译不同ABI的so库》( 分享自 @jianshucom )')+'&related='+e('jianshucom'),x=function(){if(!window.open(r,'twitter','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class='social-icon-sprite social-icon-twitter'></i><span>分享到Twitter</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='https://www.facebook.com/dialog/share?app_id=483126645039390&display=popup&href=https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=facebook',x=function(){if(!window.open(r,'facebook','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class='social-icon-sprite social-icon-facebook'></i><span>分享到Facebook</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r='https://plus.google.com/share?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=google_plus'),x=function(){if(!window.open(r,'google_plus','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class='social-icon-sprite social-icon-google'></i><span>分享到Google+</span></a></li>
|
|
<li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:'',r='http://www.douban.com/recommend/?url='+e('https://www.jianshu.com/p/bce912c7b376?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=douban')+'&title='+e('Android FFmpeg JNI开发入门_编译不同ABI的so库')+'&sel='+e(s)+'&v=1',x=function(){if(!window.open(r,'douban','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r+'&r=1'};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()"><i class='social-icon-sprite social-icon-douban'></i><span>分享到豆瓣</span></a></li>
|
|
</ul>" data-original-title="" title="" class="function-button"><i class="iconfont ic-share"></i></a> <!----></li> <!----></ul></div>
|
|
</div>
|
|
<div class="note-bottom">
|
|
<!---->
|
|
<div data-vcomp="recommended-notes" data-note-id="36645754"></div>
|
|
<!-- 相关文章 -->
|
|
<!-- 未登录用户 -->
|
|
<div class="seo-recommended-notes">
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/8321a7a9b1bd?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/13903214-25e37b72aeddba51.png" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/8321a7a9b1bd?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">Android FFmpeg JNI开发入门_编译Android的so库</a>
|
|
<p class="description">转载自:https://blog.csdn.net/yhaolpz/article/details/76408829?locationNum=2&fps=1,但是根据这篇教程,有各种问题,所以自己记录一下自己的学习经历。 前言 网上关于 Android 集成 FFmpeg ...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/6bbd449f10f5?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/5bb2c3fd-6885-4dbb-8331-38741b900a34(1).jpg" alt="48">
|
|
</div>
|
|
<span class="name">张俊峰0613</span>
|
|
</a> </div>
|
|
|
|
<div class="note ">
|
|
<a class="title" target="_blank" href="https://www.jianshu.com/p/f23c62820b79?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">Android 集成 FFmpeg (一) 基础知识及简单调用</a>
|
|
<p class="description">前言 网上关于 Android 集成 FFmpeg 的文章很多,但大多数都只介绍了步骤,没有说明背后的原理,若之前没有集成底层库的经验,那就会“神知无知”的走一步看一步,出错几率很大,出错了也不知道原因,然后会乱猜“这篇教程有问题“,“换个版本估计可以”,甚至“电脑有问题,...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/bf20b3c0da59?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/afff40f9-4d71-4e6e-8ab3-479a82cb3b15.jpg" alt="48">
|
|
</div>
|
|
<span class="name">王英豪</span>
|
|
</a> </div>
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/cb15ba69fa89?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/3161958-faf9d5c86cff919b.png" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/cb15ba69fa89?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">Android SO文件的概念、兼容、适配和可能的错误</a>
|
|
<p class="description">转载整合自: 关于Android的.so文件你所需要知道的和Android SO 文件的兼容和适配不论是否被发现,一切荣誉归属于大佬。 现有的CPU架构类型 开发Android应用时,有时候Java层的编码不能满足实现需求,就需要到C/C++实现后生成SO文件,再用Syst...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/2bbe4ee17318?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/104b3601-2bd7-4e53-9acd-99bbbe92ac93.jpg" alt="48">
|
|
</div>
|
|
<span class="name">仁昌居士</span>
|
|
</a> </div>
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/8cf24df30dba?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/9115503-da66394d54b3db19.png" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/8cf24df30dba?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">简单认识Android SO 文件</a>
|
|
<p class="description">附上官网权威说明:https://developer.android.com/ndk/guides/abis?hl=zh-cn 现有的CPU架构类型 开发Android应用时,有时候Java层的编码不能满足实现需求,就需要到C/C++实现后生成SO文件,再用System.l...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/f2793f803932?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/02719e8c-40de-46f4-b996-406898d8bae2.jpg" alt="48">
|
|
</div>
|
|
<span class="name">码寅</span>
|
|
</a> </div>
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/e16ad23d140b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/4956643-6868df42ced0c811" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/e16ad23d140b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation"> (转)Android中so使用知识和问题总结以及插件开发过程中加载so的方案解析</a>
|
|
<p class="description">转自 http://blog.csdn.net/jiangwei0910410003/article/details/52312451 一、前言 Android中有时候为了效率以及平台开发库的支持,难免会用到NDK开发,那么都会产生一个so文件,通过native方法进行调用...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/047591903f0e?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/9-cceda3cf5072bcdd77e8ca4f21c40998.jpg" alt="48">
|
|
</div>
|
|
<span class="name">御风之</span>
|
|
</a> </div>
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/0d2fb96c6d50?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/5297184-18d5ef358ad7f36b.jpg" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/0d2fb96c6d50?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">【原创】开家解忧杂货铺,你会来吗?</a>
|
|
<p class="description"> 你的烦恼 要不要咨询 正好有家 解忧杂货铺 这是我第二遍读这本书,忘了读第一遍的具体时间,只依稀记得时隔许久。还记得当时和好友璐璐说买了这本书时,她还问我买的...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/d95bb371922d?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/3c7f1b97-16a3-4d40-990f-a40ee832e031.jpg" alt="48">
|
|
</div>
|
|
<span class="name">紫七薯</span>
|
|
</a> </div>
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/8a7c0e444820?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/14765559-a045476091ef31d7.jpg" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/8a7c0e444820?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">怎样才能讲好故事:产品营销的新思路</a>
|
|
<p class="description">市场经济快速发展的时代,每个商家都清楚营销对于产品快速销售的重要性,但怎样营销才能使消费者印象深刻并提升产品销量,为何故事会有如此大的影响力?这其中蕴含着哪些不为人知的道理? 随着社会经济的快速发展,我们生活的物质世界逐渐变得丰富起来,随时随地都能买到自己喜欢的各种商品。...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/6188a408a1f4?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/8276ffeb-43e3-46f5-8acb-151110c7c87a.png" alt="48">
|
|
</div>
|
|
<span class="name">cups001</span>
|
|
</a> </div>
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/3ea0a63a98f5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/10356845-b1e323e827e201d8.png" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/3ea0a63a98f5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">武升堂功夫养生补肾这样做,男人篇</a>
|
|
<p class="description"></p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/3e087395d5d4?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/16909b85-2b12-4623-8bba-7adcd5264451.jpg" alt="48">
|
|
</div>
|
|
<span class="name">司徒泰</span>
|
|
</a> </div>
|
|
|
|
<div class="note ">
|
|
<a class="title" target="_blank" href="https://www.jianshu.com/p/7d3c422963ab?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">[传奇]貂蝉传(6)</a>
|
|
<p class="description"> 第六回 祈平安貂蝉再拜月 借芒种献帝送出关 话说,李傕麾下一将张平点兵一万前去追庞舒。这个张平,字士达,云中人氏,与其兄张扬因骁勇异常,早年曾闻名并州,从于丁原,原为吕布麾下。布杀丁原、手刃董卓,平一直跟随,李傕、郭汜、张济、樊稠犯长安时与布散,后降李傕。平与吕将军...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/8ff2ca89963f?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/0834919e-62c2-45a2-9e37-7f2d7bc9963a.jpg" alt="48">
|
|
</div>
|
|
<span class="name">瀛山一石</span>
|
|
</a> </div>
|
|
|
|
<div class="note have-img">
|
|
<a class="cover" target="_blank" href="https://www.jianshu.com/p/a4ebfe28d9ab?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/4564054-a15bd30cd9a767a9.jpg" alt="240">
|
|
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/a4ebfe28d9ab?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation">幸福=现实-期望</a>
|
|
<p class="description">人类的一切努力在于努力获得幸福。 要想谈幸福,那么首先就要谈谈什么是不幸福。 对不同的人而言,幸福自然有着不同的含义,让我们把抽象的问题具体来看。 当时有一段话是这么形容幸福的:猫吃鱼,狗吃肉,奥特曼打小怪兽。 猫如果吃不到鱼那么它会怎么样呢? 狗吃不到肉,奥特曼打不到小怪...</p>
|
|
<a class="author" target="_blank" href="https://www.jianshu.com/u/94e207d2c4ff?utm_campaign=maleskine&utm_content=user&utm_medium=seo_notes&utm_source=recommendation">
|
|
<div class="avatar">
|
|
<img src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/12-aeeea4bedf10f2a12c0d50d626951489.jpg" alt="48">
|
|
</div>
|
|
<span class="name">城中听雨</span>
|
|
</a> </div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="application/json" data-name="page-data">{"user_signed_in":false,"locale":"zh-CN","os":"windows","read_mode":"day","read_font":"font2","note_show":{"is_author":false,"is_following_author":false,"is_liked_note":false,"follow_state":0,"uuid":"429d39c3-ef24-433c-8e6b-c758430fb44f"},"note":{"id":36645754,"slug":"bce912c7b376","user_id":13903214,"notebook_id":31195242,"commentable":true,"likes_count":0,"views_count":65,"public_wordage":629,"comments_count":0,"featured_comments_count":0,"total_rewards_count":0,"is_author":false,"paid_type":"free","paid":false,"paid_content_accessible":false,"author":{"nickname":"张俊峰0613","total_wordage":45891,"followers_count":19,"total_likes_count":63}}}</script>
|
|
|
|
<script src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/babel-polyfill-6cd2d6b53fe3184b71cc.js.下载" crossorigin="anonymous"></script>
|
|
<script src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/web-base-50e74d65b7dfa4a262db.js.下载" crossorigin="anonymous"></script>
|
|
<script src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/web-5d33f6bb26c9847cd8bd.js.下载" crossorigin="anonymous"></script>
|
|
|
|
<script src="./Android FFmpeg JNI开发入门_编译不同ABI的so库 - 简书_files/entry-82e44627b2e2d73431d6.js.下载" crossorigin="anonymous"></script>
|
|
<script>
|
|
(function(){
|
|
var bp = document.createElement('script');
|
|
var curProtocol = window.location.protocol.split(':')[0];
|
|
if (curProtocol === 'https') {
|
|
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
}
|
|
else {
|
|
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
}
|
|
var s = document.getElementsByTagName("script")[0];
|
|
s.parentNode.insertBefore(bp, s);
|
|
})();
|
|
</script>
|
|
|
|
|
|
|
|
<!----><!----></body></html> |