Changeset 4575


Ignore:
Timestamp:
Jul 26, 2013 9:16:37 AM (9 years ago)
Author:
nanang
Message:

JNI projects:

  • separate makefile for Android and desktop/development
  • simplify build process for Android (upload pregenerated SWIG interface)
  • removed main loop for Android sample app
Location:
pjproject/branches/projects/jni/pjsip-apps/src/jni
Files:
5 added
4 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/jni/pjsip-apps/src/jni/Makefile

    r4574 r4575  
    1 include jni/Android.mk 
     1# $Id: Makefile 4563 2013-07-15 05:34:14Z bennylp $ 
     2 
     3# Get PJ build settings 
     4include ../../../build.mak 
     5include $(PJDIR)/build/common.mak 
     6 
     7# Get JDK location 
     8ifeq ("$(JAVA_HOME)","") 
     9  # Get javac location to determine JDK location 
     10  JAVAC_PATH = $(shell which javac) 
     11  ifeq ("$(JAVAC_PATH)","") 
     12    $(error Cannot determine JDK location using 'which' command. Please define JAVA_HOME envvar) 
     13  endif 
     14 
     15  JAVAC_PATH := $(realpath $(JAVAC_PATH)) 
     16  JAVA_BIN := $(dir $(JAVAC_PATH)) 
     17  JAVA_HOME := $(patsubst %/bin/,%,$(JAVA_BIN)) 
     18endif 
     19 
     20# OS specific 
     21ifeq ($(OS),Windows_NT) 
     22MY_JNI_LDFLAGS   = -L$(MY_JDK)/lib -Wl,--kill-at 
     23MY_JNI_LIB       = $(MY_PACKAGE_BIN)/pjsua.dll 
     24else 
     25MY_JNI_LDFLAGS   = -L$(MY_JDK)/lib -Wl,-soname,pjsua.so 
     26MY_JNI_LIB       = $(MY_PACKAGE_BIN)/libpjsua.so 
     27MY_JNI_CFLAGS    := -fPIC 
     28endif 
     29 
     30# Env settings, e.g: path to SWIG, JDK, java(.exe), javac(.exe) 
     31MY_SWIG          = swig 
     32MY_JDK           = $(JAVA_HOME) 
     33MY_JAVA          = $(MY_JDK)/bin/java 
     34MY_JAVAC         = $(MY_JDK)/bin/javac 
     35MY_JNI_CFLAGS    := $(MY_JNI_CFLAGS) -I$(MY_JDK)/include -I$(MY_JDK)/include/win32 \ 
     36                   -I$(MY_JDK)/include/linux -I. 
     37 
     38# Build settings 
     39MY_CFLAGS        = $(PJ_CFLAGS) $(MY_JNI_CFLAGS) 
     40MY_LDFLAGS       = $(PJ_LDFLAGS) $(PJ_LDLIBS) $(MY_JNI_LDFLAGS) -static-libstdc++ 
     41 
     42# Output/intermediate path settings 
     43MY_PACKAGE       = org.pjsip.pjsua 
     44MY_OUT_DIR       = jni/output 
     45MY_SWIG_IF       = $(MY_OUT_DIR)/pjsua.i 
     46MY_SWIG_FLAG     = -c++ -I$(MY_OUT_DIR) # -debug-tmsearch -debug-tmused # -Wall 
     47MY_SWIG_WRAPPER  = $(MY_OUT_DIR)/pjsua_wrap 
     48MY_PACKAGE_SRC   = src/$(subst .,/,$(MY_PACKAGE)) 
     49MY_PACKAGE_BIN   = $(MY_OUT_DIR)/bin 
     50 
     51TEST_PACKAGE     = org.pjsip.hello 
     52TEST_SRC         = src/$(subst .,/,$(TEST_PACKAGE)) 
     53 
     54jni: $(MY_JNI_LIB) java 
     55 
     56clean: 
     57        rm -f $(MY_OUT_DIR)/*.* 
     58        rm -rf $(MY_PACKAGE_SRC) 
     59 
     60$(MY_SWIG_IF).tmp: jni/swig_gen.py 
     61        @mkdir -p $(MY_OUT_DIR) 
     62        python jni/swig_gen.py > $(MY_SWIG_IF).tmp 
     63 
     64$(MY_SWIG_IF): jni/header.i $(MY_SWIG_IF).tmp 
     65        cat jni/header.i > $(MY_SWIG_IF) 
     66        cat $(MY_SWIG_IF).tmp >> $(MY_SWIG_IF) 
     67 
     68$(MY_SWIG_WRAPPER).cpp: $(MY_SWIG_IF) jni/callbacks.i jni/my_typemaps.i 
     69        @# Cleanup java outdir first, to remove any old/deprecated java files 
     70        rm -rf $(MY_PACKAGE_SRC) 
     71        @mkdir -p $(MY_PACKAGE_SRC) 
     72        $(MY_SWIG) $(MY_SWIG_FLAG) -o $(MY_SWIG_WRAPPER).cpp -package $(MY_PACKAGE) \ 
     73                -outdir $(MY_PACKAGE_SRC) -java $(MY_SWIG_IF) > $(MY_SWIG_WRAPPER)-tm.log 
     74 
     75$(MY_JNI_LIB): $(MY_SWIG_WRAPPER).cpp 
     76        @mkdir -p $(MY_PACKAGE_BIN) 
     77        $(PJ_CXX) -shared -o $(MY_JNI_LIB) $(MY_SWIG_WRAPPER).cpp $(MY_OUT_DIR)/callbacks.cpp \ 
     78                $(MY_CFLAGS) $(MY_LDFLAGS) 
     79 
     80java: $(TEST_SRC)/hello.java 
     81        @mkdir -p $(MY_PACKAGE_BIN) 
     82        $(MY_JAVAC) -d $(MY_PACKAGE_BIN) $(MY_PACKAGE_SRC)/*.java 
     83        $(MY_JAVAC) -d $(MY_PACKAGE_BIN) -classpath "$(MY_PACKAGE_BIN)" $(TEST_SRC)/hello.java 
     84 
     85test: $(MY_PACKAGE_BIN)/hello.class 
     86        @# Need to specify classpath and library path, alternatively, they can be set via 
     87        @# CLASSPATH and java.library.path env settings 
     88        $(MY_JAVA) -cp $(MY_PACKAGE_BIN) -Djava.library.path="$(MY_PACKAGE_BIN)" hello 
  • pjproject/branches/projects/jni/pjsip-apps/src/jni/jni/Android.mk

    r4574 r4575  
    1818endif 
    1919 
    20 # OS specific 
    21 ifeq ($(OS),Windows_NT) 
    22 MY_JNI_LDFLAGS   = -L$(MY_JDK)/lib -Wl,--kill-at 
    23 MY_JNI_LIB       = $(MY_PACKAGE_BIN)/pjsua.dll 
    24 else 
    2520MY_JNI_LDFLAGS   = -L$(MY_JDK)/lib -Wl,-soname,pjsua.so 
    2621MY_JNI_LIB       = $(MY_PACKAGE_BIN)/libpjsua.so 
    2722MY_JNI_CFLAGS    := -fPIC 
    28 endif 
    2923 
    3024# Env settings, e.g: path to SWIG, JDK, java(.exe), javac(.exe) 
     
    4438MY_OUT_DIR       = jni/output 
    4539MY_SWIG_IF       = $(MY_OUT_DIR)/pjsua.i 
    46 MY_SWIG_FLAG     = -c++ -I$(MY_OUT_DIR) # -debug-tmsearch -debug-tmused # -Wall 
     40MY_SWIG_FLAG     = -c++ -I$(MY_OUT_DIR) 
    4741MY_SWIG_WRAPPER  = $(MY_OUT_DIR)/pjsua_wrap 
    4842MY_PACKAGE_SRC   = src/$(subst .,/,$(MY_PACKAGE)) 
     
    6559 
    6660clean: 
    67         rm -rf $(MY_OUT_DIR) 
     61        rm -rf $(MY_SWIG_WRAPPER).* 
    6862        rm -rf $(MY_PACKAGE_SRC) 
    69  
    70 $(MY_SWIG_IF).tmp: jni/swig_gen.py 
    71         @mkdir -p $(MY_OUT_DIR) 
    72         python jni/swig_gen.py > $(MY_SWIG_IF).tmp 
    73  
    74 $(MY_SWIG_IF): jni/header.i $(MY_SWIG_IF).tmp 
    75         cat jni/header.i > $(MY_SWIG_IF) 
    76         cat $(MY_SWIG_IF).tmp >> $(MY_SWIG_IF) 
    7763 
    7864$(MY_SWIG_WRAPPER).cpp: $(MY_SWIG_IF) jni/callbacks.i jni/my_typemaps.i 
     
    8167        @mkdir -p $(MY_PACKAGE_SRC) 
    8268        $(MY_SWIG) $(MY_SWIG_FLAG) -o $(MY_SWIG_WRAPPER).cpp -package $(MY_PACKAGE) \ 
    83                 -outdir $(MY_PACKAGE_SRC) -java $(MY_SWIG_IF) > $(MY_SWIG_WRAPPER)-tm.log 
     69                -outdir $(MY_PACKAGE_SRC) -java $(MY_SWIG_IF) 
    8470 
    8571$(MY_JNI_LIB): $(MY_SWIG_WRAPPER).cpp 
     
    8874                $(MY_CFLAGS) $(MY_LDFLAGS) 
    8975 
    90 java: $(TEST_SRC)/hello.java 
    91         @mkdir -p $(MY_PACKAGE_BIN) 
    92         $(MY_JAVAC) -d $(MY_PACKAGE_BIN) $(MY_PACKAGE_SRC)/*.java 
    93         $(MY_JAVAC) -d $(MY_PACKAGE_BIN) -classpath "$(MY_PACKAGE_BIN)" $(TEST_SRC)/hello.java 
    94  
    95 test: $(MY_PACKAGE_BIN)/hello.class 
    96         @# Need to specify classpath and library path, alternatively, they can be set via 
    97         @# CLASSPATH and java.library.path env settings 
    98         $(MY_JAVA) -cp $(MY_PACKAGE_BIN) -Djava.library.path="$(MY_PACKAGE_BIN)" hello 
    99  
    10076$(LOCAL_PATH)/$(MY_SWIG_WRAPPER).cpp: $(MY_SWIG_WRAPPER).cpp 
    10177 
  • pjproject/branches/projects/jni/pjsip-apps/src/jni/src/org/pjsip/hello/MainActivity.java

    r4574 r4575  
    1212                setContentView(R.layout.activity_main); 
    1313                 
    14                 /* Call test app here 
    15                 String [] args = {"sip:192.168.1.49"}; 
    16                 hello.main(args); 
    17                 */ 
     14                hello.init(); 
    1815        } 
    1916 
  • pjproject/branches/projects/jni/pjsip-apps/src/jni/src/org/pjsip/hello/hello.java

    r4574 r4575  
    1111class app_config { 
    1212        public static int cur_call_id = -1; 
     13        public static int cur_acc_id = -1; 
    1314} 
    1415 
     
    8384                return (app_config.cur_call_id > -1); 
    8485        } 
    85  
    86         public static void main(String[] args) { 
     86         
     87        public static int init() { 
    8788                int[] tp_id = new int[1]; 
    8889                int[] acc_id = new int[1]; 
    89                 int[] call_id = new int[1]; 
    9090                int status; 
    9191 
     
    9898                        if (status != pjsua.PJ_SUCCESS) { 
    9999                                System.out.println("Error creating pjsua: " + status); 
    100                                 System.exit(status); 
     100                                return status; 
    101101                        } 
    102102                } 
     
    115115                        status = pjsua.init(cfg, log_cfg, null); 
    116116                        if (status != pjsua.PJ_SUCCESS) { 
    117                                 pj_error_exit("Error inintializing pjsua", status); 
     117                                System.out.println("Error initializing pjsua: " + status); 
     118                                return status; 
    118119                        } 
    119120                } 
     
    126127                        status = pjsua.transport_create(pjsip_transport_type_e.PJSIP_TRANSPORT_UDP, cfg, tp_id); 
    127128                        if (status != pjsua.PJ_SUCCESS) { 
    128                                 pj_error_exit("Error creating transport", status); 
     129                                System.out.println("Error creating transport: " + status); 
     130                                return status; 
    129131                        } 
    130132                } 
     
    134136                        status = pjsua.acc_add_local(tp_id[0], true, acc_id); 
    135137                        if (status != pjsua.PJ_SUCCESS) { 
    136                                 pj_error_exit("Error creating local UDP account", status); 
    137                         } 
     138                                System.out.println("Error creating local UDP account: " + status); 
     139                                return status; 
     140                        } 
     141                        app_config.cur_acc_id = acc_id[0];  
    138142                } 
    139143                 
     
    142146                        status = pjsua.start(); 
    143147                        if (status != pjsua.PJ_SUCCESS) { 
    144                                 pj_error_exit("Error starting pjsua", status); 
    145                         } 
    146                 } 
    147                  
    148                 /* Make call to the URL. */ 
    149                 if (false) { 
    150                         status = pjsua.call_make_call(acc_id[0], "sip:localhost:6000", null, 0, null, call_id); 
    151                         if (status != pjsua.PJ_SUCCESS) { 
    152                                 pj_error_exit("Error making call", status); 
    153                         } 
    154                         app_config.cur_call_id = call_id[0]; 
     148                                System.out.println("Error starting pjsua: " + status); 
     149                                return status; 
     150                        } 
    155151                } 
    156152                 
     
    165161 
    166162                        pjsua.schedule_timer(timer, tv); 
     163                } 
     164                 
     165                return pjsua.PJ_SUCCESS; 
     166        } 
     167 
     168 
     169        public static void destroy() { 
     170                pjsua.destroy(); 
     171        } 
     172         
     173 
     174        public static void main(String[] args) 
     175        { 
     176                /* Init pjsua */ 
     177                int status = init(); 
     178                if (status != pjsua.PJ_SUCCESS) { 
     179                        pj_error_exit("Failed initializing pjsua", status); 
     180                } 
     181                 
     182                /* Make call to the URL. */ 
     183                if (args.length > 1) { 
     184                        int[] call_id = new int[1]; 
     185                        status = pjsua.call_make_call(app_config.cur_acc_id, args[1], null, 0, null, call_id); 
     186                        if (status != pjsua.PJ_SUCCESS) { 
     187                                pj_error_exit("Error making call", status); 
     188                        } 
     189                        app_config.cur_call_id = call_id[0]; 
    167190                } 
    168191                 
     
    221244                        } 
    222245                } 
    223  
     246                 
    224247                /* Finally, destroy pjsua */ 
    225                 { 
    226                         pjsua.destroy(); 
    227                 } 
    228                  
    229         } 
    230 } 
     248                destroy(); 
     249 
     250        } 
     251} 
Note: See TracChangeset for help on using the changeset viewer.