简易的美图秀秀利用别人的so库
在实际开发中,有时候时间短,任务量大,可以查看类似的apk,将行apk反编译,通过看源码分析,用里面的JNI代码!
本案例中用了美图秀秀的JNI.java和jni.so链接库
项目中调用别人写的c代码:
1.得到so和开发文档;
2.把so文件放到libs/armeabi/目录下;
3.根据开发文档在java代码中写一个本地方法;
4.加载动态库,调用本地方法.
准备工作 :
创建一个第三方美图秀秀apk中JNI的一样的包名,将JNI,java放入此包名下
将得到的so所在的文件夹armeapi复制在libs下
import com.mt.mtxx.image.JNI; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.ImageView; public class MainActivity extends Activity { static { System.loadLibrary("mtimage-jni");//注意:这么名字是libs/armeapi下so的名字,去除前面的lib和后面的.so得到的 } private ImageView iv; private Bitmap bmp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); bmp = BitmapFactory.decodeFile("/mnt/sdcard/aa.jpg"); iv.setImageBitmap(bmp); } public void show(View v){ int width = bmp.getWidth(); int height = bmp.getHeight(); int[] pixels = new int[width*height]; bmp.getPixels(pixels , 0, width, 0, 0, width, height); JNI jni = new JNI(); jni.StyleLomoHDR(pixels, width, height); Bitmap bitmap = Bitmap.createBitmap(pixels, width, height, bmp.getConfig()); iv.setImageBitmap(bitmap); } }
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!