2013年10月14日 星期一

Android 開發 (二) reflection java 動態載入class的方法

為了妥善利用resource 所以使用動態的方式載入class
以下為android的範例

先create一個interface

package Printer;

public interface MessgaePrinter {
 public String print();
}

接著create一個class
package Printer;

public class HelloWorldPrinter implements MessgaePrinter{

 /**
  * @param args
  */
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

 @Override
 public String print() {  
  return "Hello World!";
 }

}
接著將 檔案 export 成 jar 檔  export的file會在 project路徑底下
接著使用 cmd 將 java 轉成android可識別的檔案
在資料夾  sdk\build-tools\android-4.2.2 底下打入
dx --dex --output=test.jar printer.jar


接著在要執行的地方打入
public class MainActivity extends Activity {

 @SuppressLint("NewApi")
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  DexClassLoader cl = new DexClassLoader("FilePath",
    "FilePath", null, getClassLoader());
  try {
   Class dynamiclib = cl.loadClass("Printer.HelloWorldPrinter");
   MessgaePrinter lib = (MessgaePrinter)dynamiclib.newInstance();
   Log.d("Ted",lib.print());
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InstantiationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

沒有留言:

張貼留言