简易的美图秀秀利用别人的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);
   }
}

 

posted on 2017-02-24 19:48  LoaderMan  阅读(373)  评论(0编辑  收藏  举报

导航